when
У Scheme if елегантний і універсальний, але без явного else може бути незрозумілим — особливо коли потрібно виконати код лише за істинної умови, без альтернативи для хибного випадку. Тоді конструкція when дає чіткішу і стислішу альтернативу.
Базова форма when виглядає так:
(when test-is-true
do-this
do-that)- Якщо
testістинний (#t), усі вирази в тіліwhenвиконуються послідовно. - Якщо
testхибний (#f), нічого не відбувається і значення не повертаються.
Приклад
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))Порівняння if і when
Щоб краще зрозуміти різницю, розгляньте приклад, де обидві конструкції використовуються разом:
(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'.")))Пояснення:
Умова
if:- Тест
(= 0 1)перевіряє, чи 0 дорівнює 1. - Оскільки це хибно (
#f), виконується гілкаelseоператораif.
- Тест
Конструкція
whenу гілціelse:- Тест
when(< 0 1)перевіряє, чи 0 менше 1. - Оскільки це істина (
#t), усі вирази в тіліwhenвиконуються послідовно:- спочатку виводиться
"The 'when' condition is true!"; - потім
"Executing multiple actions within 'when'.".
- спочатку виводиться
- Тест
Навіщо тут when?
- Замість другого
ifwhenспрощує логіку, коли явна гілкаelseне потрібна. whenпоказує, що важлива лише істинна гілка, що зменшує плутанину.
Підсумок
- Використовуйте
if, коли потрібні обидві гілки — істинна і хибна. - Використовуйте
when, коли є лише одна гілка для істинного випадку, особливо якщо потрібно виконати кілька дій. - Поєднання
ifіwhenдопомагає структурувати складніші умовні конструкції чітко і стисло.