when
In Scheme is if veelzijdig, maar zonder expliciete else-tak wordt het snel verwarrend — vooral wanneer alleen de ware tak moet worden uitgevoerd en er geen alternatief is voor het false-geval. In zo’n situatie is when duidelijker en compacter.
De basisvorm van when:
(when test-is-true
do-this
do-that)- Als
testwaar is (#t), worden alle expressies in de body vanwhenachtereenvolgens uitgevoerd. - Als
testonwaar is (#f), gebeurt er niets en wordt geen waarde teruggegeven.
Voorbeeld
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))if en when vergeleken
Beide in hetzelfde voorbeeld:
(if (= 0 1)
(lumi-message "This will not run")
(when (< 0 1)
(lumi-message "The 'when' condition is true!")
(lumi-message "Executing additional actions within 'when'.")))Uitleg
if-voorwaarde:- De test
(= 0 1)controleert of 0 gelijk is aan 1. - Omdat dit onwaar is (
#f), wordt deelse-tak uitgevoerd.
- De test
whenin deelse-tak:- De test
(< 0 1)controleert of 0 kleiner is dan 1. - Omdat dit waar is (
#t), worden alle expressies in de body vanwhenachtereenvolgens uitgevoerd.
- De test
Waarom when?
- Geen lege of dummy-
elsenodig. - Maakt duidelijk dat alleen de ware tak relevant is.
Samenvatting
- Gebruik
ifwanneer zowel de ware als de onware tak nodig is. - Gebruik
whenwanneer er alleen een ware tak is, vooral bij meerdere acties. ifenwhencombineren helpt complexe voorwaarden overzichtelijk te structureren.