Sepertinya saya cukup sering melihatnya dalam kode saya dan yang lainnya. Tidak ada apa-apa tentang hal itu yang kelihatannya sangat salah, tetapi itu mengganggu saya karena sepertinya itu bisa dilakukan dengan lebih baik. Saya kira pernyataan kasus, mungkin sedikit lebih masuk akal, tetapi seringkali variabel adalah tipe yang tidak berfungsi dengan baik atau sama sekali dengan pernyataan kasus (tergantung pada bahasa)
If variable == A
if (Flag == true)
doFooA()
else
doFooA2
else if variable == B
if (Flag == true)
doFooB()
else
doFooB2
else if variable == C
if (Flag == true)
doFooC()
else
doFooC2
Tampaknya ada beberapa cara untuk "faktor" ini, seperti 2 set if-elses, di mana satu set menangani ketika Bendera == true.
Apakah ada "cara yang baik" untuk memfaktorkan hal ini, atau mungkin ketika algoritma if-else ini terjadi biasanya berarti Anda melakukan sesuatu yang salah?
code-quality
TruthOf42
sumber
sumber
if (Flag == true)
bukan hanyaIf (Flag)
? Jika Anda pikir ituIf (Flag == true)
lebih baik, mengapa tidakif ((Flag == true) == true)
?Jawaban:
Itu bisa ditangani dengan polimorfisme.
Setiap kali Anda memiliki sekelompok if / else memeriksa jenis sesuatu, Anda dapat mempertimbangkan memusatkan if / else memeriksa dalam metode pabrik, kemudian memanggil doFoo () secara polimorfis. Tapi ini bisa menjadi over-kill untuk solusi 1-off.
Mungkin Anda bisa membuat peta kunci / nilai di mana kuncinya adalah var / flag, dan nilainya adalah fungsinya sendiri.
sumber
Jika banyak bersarang meningkatkan kompleksitas siklomatik dari kode. Hingga baru-baru ini, memiliki beberapa titik keluar dalam suatu fungsi dianggap sebagai kode terstruktur yang buruk, tetapi sekarang, selama kode itu sederhana, dan singkat , Anda dapat melakukannya, membuat kode itu sepele untuk dibaca:
sumber
Pilihan lain adalah menggabungkan if dan switch. Ini tidak lebih unggul dari teknik bersarang jika Anda, tetapi dapat mengurangi jumlah tes duplikat (jika saklar dioptimalkan ke tabel lompatan).
sumber
Yah, selalu ada ini ...
Tapi sejujurnya, saya pikir kode asli tidak setengah buruk di tempat pertama.
sumber
Gunakan polimorfisme dan
rule
arrayAtau seperti yang
mike30
disarankan: Jika kondisi aturan dapat dengan mudah membentuk kunci maka hashmap adalah cara terbaik untuk pergi.sumber