Kapan tepat menggunakan statement switch fall-through (klasik)? Apakah penggunaan seperti itu direkomendasikan dan dianjurkan atau haruskah dihindari dengan cara apa pun?
switch-statement
shabunc
sumber
sumber
Jawaban:
Inilah contoh di mana itu akan berguna.
Hal semacam ini (di mana satu kasus termasuk yang lain) agak jarang, saya pikir, itulah sebabnya beberapa bahasa yang lebih baru tidak mengizinkan fallover atau memerlukan sintaks khusus untuk itu.
sumber
// INTENTIONAL FALL THROUGH HERE
komentar lengkap yang diperlukan.GetItemsForLevel(Info)
meminta panggilanGetItemsForLevel(Warning)
dan sebagainya.Saya menggunakannya ketika fungsi tertentu harus diterapkan untuk lebih dari satu nilai. Misalnya, Anda memiliki objek dengan properti bernama operationCode. Jika kode sama dengan 1, 2, 3 atau 4, Anda ingin memulaiOperationX (). Jika 5 atau 6, Anda ingin memulai operasi () dan 7 Anda memulai operasi (). Mengapa ada 7 case lengkap dengan fungsionalitas dan istirahat ketika Anda dapat menggunakan fall-throughs?
Saya pikir itu sepenuhnya valid dalam situasi tertentu, terutama jika itu menghindari 100 pernyataan if-else. =)
sumber
switch
dengan beberapacase
s yang terkait dengan kode yang sama. Itu berbeda dari kegagalan, di mana eksekusi satucase
berlanjut ke yang berikutnya karena kurangnya a dibreak
antara mereka.Saya sudah menggunakannya sesekali, saya pikir itu selalu penggunaan yang tepat - tetapi hanya ketika disertakan dengan komentar yang sesuai.
sumber
Kasing jatuh baik-baik saja. Saya sering menemukan bahwa enumerasi digunakan di banyak tempat, dan ketika Anda tidak perlu membedakan beberapa kasus, lebih mudah menggunakan logika fall-through.
Misalnya (perhatikan komentar penjelas):
Saya menemukan penggunaan semacam ini bisa diterima.
sumber
case X: case Y: doSomething()
dancase X: doSomething(); case Y: doAnotherThing()
. Dalam yang pertama, niatnya cukup eksplisit, sedangkan yang kedua, kejatuhannya mungkin disengaja atau tidak. Dalam pengalaman saya, contoh pertama tidak pernah memicu peringatan apa pun di kompiler / penganalisa kode, sedangkan yang kedua tidak. Secara pribadi, saya hanya akan menyebut contoh kedua "gagal" - tidak yakin tentang definisi "resmi".Tergantung pada:
Dua masalah utama yang terkait dengan membiarkan satu kasus jatuh ke yang berikutnya adalah:
Itu membuat kode Anda tergantung pada urutan pernyataan kasus. Itu tidak terjadi jika Anda tidak pernah gagal, dan itu menambah tingkat kerumitan yang sering tidak diinginkan.
Tidak jelas bahwa kode untuk satu kasus menyertakan kode untuk satu atau lebih kasus berikutnya.
Beberapa tempat secara eksplisit melarang jatuh. Jika Anda tidak bekerja di tempat seperti itu, dan jika Anda merasa nyaman dengan latihan itu, dan jika melanggar kode yang dimaksud tidak akan menyebabkan penderitaan nyata, maka itu mungkin bukan hal terburuk di dunia. Namun, jika Anda melakukannya, pastikan untuk meletakkan komentar yang menarik perhatian di dekat untuk memperingatkan mereka yang datang kemudian (termasuk masa depan Anda).
sumber
Berikut adalah contoh cepat (diakui tidak lengkap (tidak ada penanganan khusus tahun kabisat)) yang membuat hidup saya lebih sederhana:
sumber
Jika saya merasa perlu untuk beralih dari satu kasus ke kasus lain (jarang, harus diakui), saya lebih suka untuk menjadi sangat eksplisit dan
goto case
, tentu saja, yang mengasumsikan bahasa Anda mendukungnya.Karena jatuh melalui sangat jarang, dan sangat mudah untuk diabaikan saat membaca kode, saya merasa pantas untuk eksplisit - dan goto, bahkan jika itu untuk sebuah kasus, harus menonjol seperti jempol yang sakit.
Ini juga membantu menghindari bug yang mungkin terjadi ketika pernyataan kasus disusun ulang.
sumber