when
In Scheme if è versatile, ma senza un ramo else esplicito può confondere — soprattutto quando deve essere eseguito solo il ramo vero, senza alternativa per il caso falso. In questi casi, when è più chiaro e conciso.
La forma base di when:
(when test-is-true
do-this
do-that)- Se
testè vero (#t), tutte le espressioni nel corpo diwhenvengono eseguite in sequenza. - Se
testè falso (#f), non succede nulla e non viene restituito alcun valore.
Esempio
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))Confronto tra if e when
Entrambi nello stesso esempio:
(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'.")))Spiegazione
Condizione
if:- Il test
(= 0 1)verifica se 0 è uguale a 1. - Poiché è falso (
#f), viene eseguito il ramoelse.
- Il test
whennel ramoelse:- Il test
(< 0 1)verifica se 0 è minore di 1. - Poiché è vero (
#t), tutte le espressioni nel corpo diwhenvengono eseguite in sequenza.
- Il test
Perché when?
- Evita un
elsevuoto o fittizio. - Chiarisce che conta solo il ramo vero.
Riepilogo
- Usa
ifquando servono entrambi i rami, vero e falso. - Usa
whenquando c’è solo il ramo vero, soprattutto per più azioni. - Combinare
ifewhenaiuta a strutturare condizioni complesse in modo chiaro e conciso.