Kapan
Dalam Scheme, meskipun if elegan dan serbaguna, namun dapat membingungkan bila digunakan tanpa else yang eksplisit. Hal ini terutama berlaku ketika tujuannya adalah untuk mengeksekusi satu cabang kode hanya ketika kondisinya benar, tanpa tindakan alternatif untuk kasus false. Dalam skenario seperti itu, konstruksi when memberikan alternatif yang lebih jelas dan ringkas.
Bentuk dasar when terlihat seperti ini:
(when test-is-true
do-this
do-that)- Jika
testbernilai benar (#t), semua ekspresi dalam isi konstruksiwhendieksekusi secara berurutan. - Jika
testbernilai false (#f), tidak ada yang terjadi, dan tidak ada nilai yang dikembalikan.
Contoh
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))Membandingkan if dan when
Untuk lebih memahami perbedaan antara if dan when, perhatikan contoh berikut di mana keduanya digunakan bersama-sama:
(if (= 0 1)
(lumi-message "This will not run")
(when (< 0 1)
(lumi-message "The 'when' condition is true!")
(lumi-message "Executing multiple actions within 'when'.")))Penjelasan:
Kondisi
if:- Tes
(= 0 1)memeriksa apakah 0 sama dengan 1. - Karena ini salah (
#f), cabangelsedariifdieksekusi.
- Tes
Konstruksi
whendi Cabangelse:- Tes
when(< 0 1)memeriksa apakah 0 kurang dari 1. - Karena ini benar (
#t), semua ekspresi dalam badanwhendieksekusi secara berurutan:- Pertama, mencetak
"The 'when' condition is true!". - Kemudian, mencetak
"Executing multiple actions within 'when'.".
- Pertama, mencetak
- Tes
Mengapa Menggunakan when Di Sini?
- Menggunakan
whenalih-alihifyang lain menyederhanakan logika ketika tidak diperlukan cabangelseyang eksplisit untuk kondisi tersebut. whenmemperjelas bahwa hanya cabang sebenarnya yang relevan, sehingga mengurangi potensi kebingungan.
Ringkasan
- Gunakan
ifketika Anda membutuhkan cabang benar dan salah. - Gunakan
whenketika hanya ada satu cabang untuk kasus sebenarnya, terutama ketika beberapa tindakan perlu dijalankan. - Menggabungkan
ifdanwhendapat membantu menyusun persyaratan yang lebih kompleks dengan jelas dan ringkas.