Jika Anda ingin menjalankan beberapa kode berdasarkan dua atau lebih kondisi, manakah cara terbaik untuk memformat pernyataan if itu?
contoh pertama: -
if(ConditionOne && ConditionTwo && ConditionThree)
{
Code to execute
}
Contoh kedua: -
if(ConditionOne)
{
if(ConditionTwo )
{
if(ConditionThree)
{
Code to execute
}
}
}
yang paling mudah untuk dipahami dan dibaca dengan mengingat bahwa setiap kondisi dapat berupa nama fungsi yang panjang atau semacamnya.
if-statement
formatting
language-agnostic
Guy Coder
sumber
sumber
Jawaban:
Saya lebih suka Opsi A
Jika Anda memiliki variabel / kondisi metode yang sangat panjang, Anda dapat memutus barisnya saja
Jika lebih rumit lagi, saya akan mempertimbangkan untuk melakukan metode kondisi secara terpisah di luar pernyataan if
IMHO Satu-satunya alasan untuk opsi 'B' adalah jika Anda memiliki
else
fungsi terpisah untuk dijalankan untuk setiap kondisi.misalnya
sumber
Jawaban lain menjelaskan mengapa opsi pertama biasanya yang terbaik. Namun jika Anda memiliki beberapa kondisi, pertimbangkan untuk membuat fungsi (atau properti) terpisah dengan melakukan pemeriksaan kondisi di opsi 1. Ini membuat kode lebih mudah dibaca, setidaknya saat Anda menggunakan nama metode yang baik.
Jika kondisinya hanya bergantung pada variabel cakupan lokal, Anda dapat membuat fungsi baru menjadi statis dan meneruskan semua yang Anda butuhkan. Jika ada campuran, berikan barang-barang lokal.
sumber
isOkToDoWhatever
sebagai properti sangat masuk akal.if
keterbacaan pernyataan tetapi lebih kepada keterbacaan kondisi.Contoh pertama lebih "mudah dibaca".
Sebenarnya, menurut saya Anda hanya boleh menggunakan yang kedua setiap kali Anda harus menambahkan beberapa "logika lain", tetapi untuk Kondisional sederhana, gunakan rasa pertama. Jika Anda khawatir tentang kondisi yang lama, Anda selalu dapat menggunakan sintaks berikutnya:
Semoga berhasil!
sumber
if ( ( single conditional expression A ) && ( single conditional expression B ) && ( single conditional expression C ) ) { opAllABC(); } else { opNoneABC(); }
Memformat beberapa ekspresi bersyarat dalam pernyataan if-else seperti ini:
a. semua operasi logika biner {&&, ||} dalam ekspresi yang ditampilkan pertama
b. kedua operan bersyarat dari setiap operasi biner jelas karena sejajar secara vertikal
c. Operasi ekspresi logis bersarang dibuat jelas menggunakan indentasi, seperti pernyataan bersarang di dalam klausa
a. ini untuk menghindari kesalahan analisis statis yang umum
a. nonaktifkan tes bersyarat tunggal individu hanya dengan //
b. menetapkan titik istirahat tepat sebelum atau sesudah
...
// disable any single conditional test with just a pre-pended '//' // set a break point before any individual test // syntax '(1 &&' and '(0 ||' usually never creates any real code if ( 1 && ( single conditional expression A ) && ( single conditional expression B ) && ( 0 || ( single conditional expression C ) || ( single conditional expression D ) ) ) { ... ; } else { ... ; }
sumber
Pertanyaan yang diajukan dan sejauh ini telah dijawab seolah-olah keputusan harus dibuat murni atas dasar "sintaksis".
Saya akan mengatakan bahwa jawaban yang benar tentang bagaimana Anda mengatur sejumlah kondisi dalam jika, harus bergantung pada "semantik" juga. Jadi kondisi harus dipecah dan dikelompokkan sesuai dengan apa yang berjalan bersama "secara konseptual".
Jika dua tes benar-benar merupakan dua sisi dari mata uang yang sama misalnya. if (x> 0) && (x <= 100) lalu gabungkan keduanya pada baris yang sama. Jika kondisi lain secara konseptual jauh lebih jauh misalnya. user.hasPermission (Admin ()) lalu letakkan di barisnya sendiri
Misalnya.
sumber
Yang kedua adalah contoh klasik dari Pola Anti Panah Jadi saya akan menghindarinya ...
Jika kondisi Anda terlalu lama, ekstrak ke dalam metode / properti.
sumber
Yang pertama lebih mudah, karena, jika Anda membacanya dari kiri ke kanan Anda mendapatkan: "Jika sesuatu DAN sesuatu yang lain DAN sesuatu yang lain THEN", yang merupakan kalimat yang mudah dipahami. Contoh kedua berbunyi "Jika sesuatu MAKA jika sesuatu lain MAKA jika sesuatu yang lain MAKA", yang janggal.
Juga, pertimbangkan jika Anda ingin menggunakan beberapa OR dalam klausa Anda - bagaimana Anda melakukannya dalam gaya kedua?
sumber
Di Perl Anda bisa melakukan ini:
Jika salah satu kondisi gagal, itu akan terus berlanjut, setelah pemblokiran. Jika Anda mendefinisikan variabel apa pun yang ingin Anda pertahankan setelah blok, Anda perlu mendefinisikannya sebelum blok.
sumber
Saya sudah lama menghadapi dilema ini dan saya masih belum bisa menemukan solusi yang tepat. Menurut pendapat saya, satu-satunya cara yang baik adalah dengan mencoba menyingkirkan kondisi sebelumnya terlebih dahulu sehingga Anda tidak tiba-tiba membandingkan 5 di antaranya.
Jika tidak ada alternatif maka seperti yang disarankan orang lain - pecahkan menjadi yang terpisah dan persingkat nama atau kelompokkan mereka dan misalnya jika semua harus benar maka gunakan sesuatu seperti "jika tidak ada salah dalam larik x maka jalankan".
Jika semua gagal @Eoin Campbell memberikan ide yang cukup bagus.
sumber
Ketika kondisi sangat kompleks, saya menggunakan gaya berikut (contoh kehidupan nyata PHP):
Saya percaya ini lebih bagus dan mudah dibaca daripada menyusun beberapa tingkat
if()
. Dan dalam beberapa kasus seperti ini Anda tidak dapat memecah kondisi kompleks menjadi beberapa bagian karena jika tidak, Anda harus mengulangi pernyataan yang sama diif() {...}
blok berkali-kali.Saya juga percaya bahwa menambahkan sedikit "udara" ke dalam kode selalu merupakan ide yang bagus. Ini sangat meningkatkan keterbacaan.
sumber