when
I Scheme är if elegant och mångsidig, men utan explicit else kan den bli förvirrande — särskilt när avsikten är att köra en enda gren endast när villkoret är sant, utan någon åtgärd för falskt fall. I sådana situationer ger konstruktionen when ett tydligare och mer koncist alternativ.
Den grundläggande formen av when ser ut så här:
(when test-is-true
do-this
do-that)- Om
testutvärderas till sant (#t) körs alla uttryck iwhen-kroppen i ordning. - Om
testutvärderas till falskt (#f) händer inget och inga värden returneras.
Exempel
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))Jämförelse mellan if och when
För att förstå skillnaden tydligare, tänk på följande exempel där båda används tillsammans:
(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'.")))Förklaring:
if-villkoret:- Testet
(= 0 1)kontrollerar om 0 är lika med 1. - Eftersom det är falskt (
#f) körselse-grenen avif.
- Testet
wheni else-grenen:- Testet
(< 0 1)kontrollerar om 0 är mindre än 1. - Eftersom det är sant (
#t) körs alla uttryck iwhen-kroppen i ordning:- Först skrivs
"The 'when' condition is true!"ut. - Sedan skrivs
"Executing multiple actions within 'when'."ut.
- Först skrivs
- Testet
Varför använda when här?
whenförenklar logiken när det inte behövs en explicitelse-gren.whengör tydligt att endast den sanna grenen är relevant, vilket minskar risken för missförstånd.
Sammanfattning
- Använd
ifnär både sann och falsk gren behövs. - Använd
whennär endast den sanna grenen är relevant, särskilt när flera åtgärder ska köras. - Att kombinera
ifochwhenkan göra mer komplexa villkor tydligare och mer koncisa.