Jenis metode apa yang ada untuk keluar sebelum waktunya dari if
klausa?
Ada kalanya saya menulis kode dan ingin meletakkan break
pernyataan di dalam if
klausa, hanya untuk diingat bahwa itu hanya dapat digunakan untuk loop.
Mari kita ambil kode berikut sebagai contoh:
if some_condition:
...
if condition_a:
# do something
# and then exit the outer if block
...
if condition_b:
# do something
# and then exit the outer if block
# more code here
Saya dapat memikirkan satu cara untuk melakukan ini: dengan asumsi kasus keluar terjadi dalam pernyataan if bersarang, bungkus kode yang tersisa di blok lain yang besar. Contoh:
if some_condition:
...
if condition_a:
# do something
# and then exit the outer if block
else:
...
if condition_b:
# do something
# and then exit the outer if block
else:
# more code here
Masalah dengan ini adalah bahwa lebih banyak lokasi keluar berarti lebih banyak kode bersarang / menjorok ke dalam.
Sebagai alternatif, saya dapat menulis kode saya agar if
klausa sekecil mungkin dan tidak perlu keluar.
Adakah yang tahu cara yang baik / lebih baik untuk keluar dari if
klausa?
Jika ada klausul else-if dan else terkait, saya pikir keluar akan melewatinya.
sumber
elif
?if a: #stuff; #stuff_inbetween; if b: #stuff;
kode peralihan bergantung padanot a
tetapi tidak bergantung padab
.elif
stackoverflow.com/a/2069680/7045119Jawaban:
(Metode ini berfungsi untuk
if
s, beberapa loop bersarang, dan konstruksi lain yang tidak dapat Anda lakukanbreak
dengan mudah.)Bungkus kode dalam fungsinya sendiri. Alih-alih
break
, gunakanreturn
.Contoh:
sumber
(Tolong jangan gunakan ini.)
sumber
goto
.sumber
while True:
. Pastikan untuk memasukkanbreak
pernyataan di akhir! Untuk bahasa dengan konstruksi do-while, itu lebih ideal untuk dilakukan:do { code that can conditionally break out } while (false);
Anda dapat meniru fungsionalitas goto dengan pengecualian:
Penafian: Saya hanya bermaksud memberi perhatian Anda kemungkinan melakukan hal-hal dengan cara ini, sementara saya sama sekali tidak mendukungnya sebagai hal yang masuk akal dalam keadaan normal. Seperti yang saya sebutkan dalam komentar tentang pertanyaan itu, menyusun kode untuk menghindari persyaratan Bizantium di tempat pertama lebih disukai sejauh ini. :-)
sumber
mungkin ini?
sumber
elif
ketika saya menulis ini. Meskipun saya pikir ini tidak akan berfungsi dalam situasi di mana saya ingin kode dijalankan di antara pernyataan if bersarang.Untuk apa yang sebenarnya ditanyakan, pendekatan saya adalah menempatkannya
if
di dalam loop satu lingkaranMenguji:
sumber
for _ in range(1):
daripadawhile True:
. (1) Komunikasikan niat Anda dengan lebih baik tentang satu loop iterasi dan (2) tidak ada pernyataan jeda terakhir untuk keluar dari loop (mungkin terhapus secara tidak sengaja nanti)Secara umum, jangan. Jika Anda bersarang "jika" dan memutuskannya, Anda melakukannya dengan salah.
Namun, jika Anda harus:
Catatan, fungsi tidak HARUS dideklarasikan dalam pernyataan if, mereka dapat dideklarasikan sebelumnya;) Ini akan menjadi pilihan yang lebih baik, karena akan menghindari keharusan untuk merefaktor if / then yang jelek di kemudian hari.
sumber
if condition_a
danif condition_b
bersarang di dalam fileif some_condition
. Saya ingin bisa keluar dariif some_condition
.Secara efektif, apa yang Anda gambarkan adalah pernyataan kebagian, yang umumnya digeser cukup berat. Contoh kedua Anda jauh lebih mudah untuk dipahami.
Namun, pembersih tetap akan menjadi:
sumber
Ada cara lain yang tidak bergantung pada fungsi pendefinisian (karena terkadang itu kurang dapat dibaca untuk potongan kode kecil), tidak menggunakan loop sementara luar ekstra (yang mungkin membutuhkan apresiasi khusus dalam komentar bahkan untuk dapat dimengerti pada pandangan pertama) , tidak menggunakan goto (...) dan yang paling penting mari kita pertahankan tingkat indentasi Anda untuk bagian luar jika jadi Anda tidak perlu memulai hal-hal bersarang.
Ya, itu juga membutuhkan pandangan kedua untuk keterbacaan, namun, jika cuplikan kodenya kecil, ini tidak perlu melacak loop sementara yang tidak akan pernah berulang dan setelah memahami untuk apa perantara itu, itu mudah dibaca, semua masuk satu tempat dan dengan lekukan yang sama.
Dan itu seharusnya cukup efisien.
sumber
Jadi di sini saya mengerti Anda mencoba untuk keluar dari blok kode if luar
Salah satu jalan keluarnya adalah Anda dapat menguji kondisi palsu di blok if luar, yang kemudian secara implisit keluar dari blok kode, Anda kemudian menggunakan blok lain untuk menyarangkan if lainnya untuk melakukan sesuatu.
sumber
Satu-satunya hal yang akan menerapkan ini tanpa metode tambahan adalah
elif
sebagai contoh berikutsumber
Berikut cara lain untuk mengatasinya. Ini menggunakan satu item untuk loop yang memungkinkan Anda untuk hanya menggunakan lanjutkan. Ini mencegah kebutuhan yang tidak perlu untuk memiliki fungsi tambahan tanpa alasan. Dan juga menghilangkan potensi loop tidak terbatas.
sumber
gunakan
return
jika kondisi akan mengembalikan Anda keluar dari fungsi, sehingga Anda bisa menggunakan kembali untuk memutus kondisi if.sumber