Jadi saya membuat metode untuk membuat garis salam berdasarkan dua orang dari database.
Ada empat parameter: dua nama ( name1
dan name2
) dan dua jenis kelamin ( gender
dan gender2
).
Untuk setiap kombinasi gender, saya memiliki jenis output yang berbeda.
Misalnya: jika jenis kelamin 1 adalah M
(laki-laki) dan jenis kelamin 2 juga M
, hasilnya harus seperti:
Dear Sir name1 and Sir name2,
Saat ini, saklar saya terlihat seperti ini:
switch(gender1){
case 'M':
switch(gender2){
case 'M': printf("Dear Sir %s and Sir %s", name1, name2); break;
case 'W': printf("Dear Sir %s and Madame %s", name1, name2); break;
case 'R': ...
}
break;
case 'W':
switch(gender2){
case 'M': printf("Dear Madame %s and Sir %s", name1, name2); break
case 'W': printf("Dear Madame %s and Madame %s", name1, name2); break;
case 'R': ...
}
break;
case ...etc.
}
Perhatikan bahwa saya memiliki beberapa pilihan gender, seperti 'R'
untuk "Dear Relation"
dan beberapa lagi yang saya tidak punya waktu untuk menerjemahkan.
Bagaimana saya bisa mengurangi pernyataan saklar ganda ini?
Menempatkan saklar kedua dalam metode bukanlah pilihan karena ada juga kasus di mana kedua nama adalah sama dan kemudian output harus digabungkan seperti: "Dear Sir and Madame name1,"
gender1+gender2
.Madam
tidakMadame
.Madame
adalah bentuk Prancis.Jawaban:
Tambahkan judul ke parameter printf:
Anda dapat mengekstrak sakelar ke fungsinya sendiri untuk kegunaan ulang dan kekompakan.
sumber
genderToTitle
sehingga Anda tidak perlu mengulanginya? (Atau gunakan loop)Solusi radikal: Biarkan pengguna menentukan judul mereka sendiri (dari daftar yang telah Anda tentukan sebelumnya).
Solusi Anda (sebagaimana dilihat melalui mata bahasa Inggris) hanya muncul untuk melayani Lords ("Sir") dan wanita; kebanyakan pria akan dipanggil sebagai "Tuan", sebagian besar perempuan sebagai "Nona", "Nyonya" atau "Nyonya", tergantung pada status perkawinan dan pendapat pribadi mereka. Lalu ada banyak penghargaan lainnya berdasarkan pada kedudukan profesional - "Dokter", "Profesor", "Pendeta" dan bahkan, jika Anda merasa benar-benar optimis tentang situs Anda, "Kekudusan"!
Solusi yang lebih sederhana: Anda memerlukan fungsi [tunggal] untuk menerjemahkan "jenis kelamin" menjadi bahasa kehormatan. Kode satu kali dan panggil untuk kedua orang:
sumber
Dear Sir
sebagai bentuk alamat sangat dapat diterima untuk semua pria. Saya setuju bahwa sebagai gelar , Sir (seperti dalamSir Phill
) harus dibatasi untuk ksatria (bukan bangsawan), tapi itu masalah yang berbeda.Judul benar-benar termasuk dalam database, tetapi Anda menyatakan tidak memiliki kendali atas ini. Anda belum menentukan tag bahasa tetapi sintaksnya ada dalam keluarga C, jadi ini akan menjadi pseudocode yang hampir C ++:
Manfaatnya adalah Anda mengubur logika pemilihan dalam struktur data daripada struktur kode: ini mirip dengan mendelegasikan ke database, dan lebih fleksibel. Jika Anda menyimpan peta itu sebagai konstanta statis di suatu tempat, Anda hampir dapat menggunakannya seperti database: menjadi sebuah struktur tunggal untuk memperbarui yang dapat digunakan di banyak tempat dalam kode tanpa perlu menulis lebih banyak kode.
sumber
static const
:static const map<string, string> titles{make_pair("M", "Sir"), make_pair("F", "Madam")};
. Yah, seseorang dapat meninggalkannyaconst
jika memodifikasi itu harus diizinkan.Jawaban ratchet freak adalah ide yang cukup bagus jika kalimatnya semua pola yang sama, tetapi dengan dua insets, masing-masing hanya bergantung pada
gender1
masing-masinggender2
.Jawaban Phil W. mungkin jawaban yang paling fleksibel karena memungkinkan kontrol eksplisit atas salam, meskipun dia cukup benar itu adalah perubahan radikal. Anda mungkin tidak memiliki data dalam formulir itu.
Jawaban Kilian Foth mungkin adalah yang terbaik untuk pertanyaan yang diajukan, meskipun ia bergantung pada pengalihan string, yang mungkin tidak mungkin atau setidaknya paling mahal.
Penyempurnaan pada jawaban Kilian adalah menghitung nilai tunggal dari kedua input, dan mengaktifkannya:
Tentu saja, karena Anda mendapatkan keempat input (2 nama dan 2 gender) dari database, menambahkan tabel lain dan bergabung untuk mendapatkan salam yang tepat mungkin lebih fleksibel dan mungkin lebih mudah daripada yang di atas.
sumber
Jika bahasa Anda memungkinkan Anda melakukannya, Anda dapat menulis
Ini tidak selalu lebih baik daripada versi Anda, karena masih ada duplikasi, tetapi itu menghindari bersarang
switch
.sumber
Anda biasanya ingin string UI seperti ini ditarik dari tabel string alih-alih dikode dalam kode sumber, untuk pelokalan dan kemudahan memperbarui. Jadi pendekatan yang akan saya lakukan adalah menggunakan input untuk membangun kunci pencarian, jadi sesuatu seperti:
Saran lain tentang membiarkan pengguna memilih judul mereka sendiri adalah valid, jika Anda memiliki kesempatan untuk mendapatkan informasi itu. Saya masih akan menggunakan tabel string lookup dalam solusinya.
sumber