когда
Хотя в Scheme if элегантен и универсален, он может сбить с толку, если использовать его без явного else. Это особенно верно, когда намерение состоит в том, чтобы выполнить одну ветку кода только тогда, когда условие истинно, без каких-либо альтернативных действий для случая false. В таких сценариях конструкция when предоставляет более четкую и краткую альтернативу.
Базовая форма when выглядит следующим образом:
(when test-is-true
do-this
do-that)- Если
testимеет значение true (#t), все выражения в теле конструкцииwhenвыполняются последовательно. - Если
testимеет значение false (#f), ничего не происходит и никакие значения не возвращаются.
Пример
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))Контраст if и when
Чтобы лучше понять разницу между 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), выполняется веткаelseif.
- Тест
Конструкция
whenв веткеelse:- Тест
when(< 0 1)проверяет, меньше ли 0 1. - Поскольку это правда (
#t), все выражения в телеwhenвыполняются последовательно:- First, it prints
"The 'when' condition is true!". - Then, it prints
"Executing multiple actions within 'when'.".
- First, it prints
- Тест
Зачем использовать здесь when?
- Использование
whenвместо другогоifупрощает логику, когда нет необходимости в явной ветвиelseдля условия. whenдает понять, что актуальна только истинная ветвь, что снижает потенциальную путаницу.
Резюме
- Используйте
if, когда вам нужна как истинная, так и ложная ветвь. - Используйте
when, когда для истинного случая существует только одна ветвь, особенно когда необходимо выполнить несколько действий. - Сочетание
ifиwhenможет помочь четко и кратко структурировать более сложные условные выражения.