Dalam beberapa kode yang saya tulis sekarang, saya memiliki sesuatu seperti ini:
if (uncommon_condition) {
do_something_simple();
} else {
do();
something();
long();
and();
complicated();
}
Sebagian dari saya berpikir, "Tidak masalah dengan cara penulisannya. Kasing sederhana harus didahulukan dan kasing rumit selanjutnya." Tetapi bagian lain mengatakan: "Tidak! else
Kode harus berada di bawah if
, karena if
untuk menangani kasus yang tidak biasa dan else
untuk menangani semua kasus lainnya." Mana yang benar atau lebih disukai?
coding-style
LAMBANG
sumber
sumber
Jawaban:
Diurutkan berdasarkan kemungkinan mereka dieksekusi. Kondisi yang paling umum, kemungkinan besar, dll. Harus didahulukan.
"Kesulitan berurusan dengan mereka" harus ditangani dengan struktur kode, abstraksi, dll. Dalam contoh blok lain dapat di refactored menjadi pemanggilan metode tunggal. Anda ingin
if
klausa Anda berada pada tingkat abstrak yang sama.sumber
not
. Secara pribadi saya akan berkonsentrasi pada menghindarinot
kondisi. Mereka telah terbukti menginduksi lebih banyak beban kognitif untuk memahami daripada kondisi "positif" dan merugikan keterbacaan / pemahaman kode. Saya cenderung menggunakannya dalam pernyataan penjaga saja.doesNotAllowxxFiles = false
. Cukup buruk tetapi kemudian lakukan iniif(! doesNotAllowxxFiles)
Cobalah untuk meningkatkan keterbacaan. Salah satu caranya adalah dengan menempatkan blok kode yang lebih panjang ke bagian yang lain.
lebih mudah dibaca daripada
sumber
Tidak ada aturan baku seperti itu yang saya dengar tentang penggunaan tetapi saya ikuti seperti ini
Tetapi jika keduanya memiliki fungsi yang sama dengan properti yang berbeda maka lebih baik menggunakan yang tidak biasa terlebih dahulu dari biasanya sehingga Anda dapat menyimpan satu instruksi.
Untuk kode di atas kode assembly akan menjadi seperti ini:
Jika kondisi di dalam jika benar maka aliran adalah 1-> 2 (4 instruksi)
JIKA kondisi di dalam jika salah maka aliran adalah 1-> 3 (3 instruksi)
Jadi lebih baik untuk menempatkan kejadian yang tidak biasa atau jarang terjadi jika bagian dan kondisi normal di tempat lain sehingga kita dapat menyimpan satu instruksi setiap kali ;-)
sumber
Saya telah menemukan bahwa pola sebaliknya yang tepat mengarah pada kode yang lebih mudah dibaca, dan mengurangi atau menghilangkan pernyataan bersarang jika. Saya menyebutnya sebagai pola "tantangan". (Dalam bercerita, tantangan akan menjadi serangkaian tantangan yang harus dipenuhi dengan sukses sebelum tugas akhir selesai.) Dengan menangani casing tepi Anda terlebih dahulu , Anda membiarkan badan utama kode Anda menjadi bersih dan ringkas:
sumber
Bagi saya ini lebih tentang kondisi daripada kompleksitas kode yang mereka jalankan. Anda perlu memesan kondisi agar dapat menjebak kondisi yang tidak biasa terlebih dahulu, kemudian yang lebih umum setelah. Juga, jika kode lain sangat panjang dan rumit, saya mungkin akan membuat sub untuk itu, untuk menjaga bagian bersyarat yang jelas bagi pembaca.
sumber
Saya tidak memiliki aturan baku, tetapi umumnya saya mengikuti ini - pertama, pertimbangkan di mana ada pola desain yang terlewat yang akan menyebabkan hal ini. Jika tidak, saya menuliskannya sehingga kondisi di if adalah yang paling jelas dipahami. Yaitu, menghindari dobel negatif dan sejenisnya.
sumber
Adapun skenario seperti itu tidak ada aturan praktis untuk itu. Tetapi mungkin kita dapat mengikuti untuk menulis kode positif atau kemungkinan besar di blok if dan ditinggalkan di blok else atau kasus default.
sumber