Quando
In Scheme, sebbene if sia elegante e versatile, può creare confusione se utilizzato senza un else esplicito. Ciò è particolarmente vero quando l’intenzione è quella di eseguire un singolo ramo di codice solo quando una condizione è vera, senza alcuna azione alternativa per il caso false. In tali scenari, il costrutto when fornisce un’alternativa più chiara e concisa.
La forma base di when è simile alla seguente:
(when test-is-true
do-this
do-that)- Se
testrestituisce true (#t), tutte le espressioni nel corpo del costruttowhenvengono eseguite in sequenza. - Se
testrestituisce false (#f), non accade nulla e non viene restituito alcun valore.
Esempio
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))Contrasto if e when
Per comprendere meglio la differenza tra if e when, considerare il seguente esempio in cui entrambi vengono utilizzati insieme:
(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:
La condizione
if:- Il test
(= 0 1)verifica se 0 è uguale a 1. - Poiché questo è falso (
#f), viene eseguito il ramoelsediif.
- Il test
Il costrutto
whennel ramoelse:- Il test
when(< 0 1)controlla se 0 è inferiore a 1. - Poiché questo è vero (
#t), tutte le espressioni all’interno del corpo diwhenvengono eseguite in sequenza:- First, it prints
"The 'when' condition is true!". - Then, it prints
"Executing multiple actions within 'when'.".
- First, it prints
- Il test
Perché utilizzare when qui?
- L’utilizzo di
wheninvece di un altroifsemplifica la logica quando non è necessario un ramoelseesplicito per la condizione. whenchiarisce che solo il ramo vero è rilevante, riducendo la potenziale confusione.
Riepilogo
- Utilizza
ifquando hai bisogno sia di un ramo vero che di un ramo falso. - Utilizzare
whenquando è presente un solo ramo per il caso reale, soprattutto quando è necessario eseguire più azioni. - La combinazione di
ifewhenpuò aiutare a strutturare condizionali più complessi in modo chiaro e conciso.