when
No Scheme, if é versátil, mas sem um ramo else explícito pode confundir — especialmente quando só o ramo verdadeiro deve ser executado, sem ação alternativa para o caso falso. Nesses cenários, when é mais claro e conciso.
A forma básica de when:
(when test-is-true
do-this
do-that)- Se
testfor verdadeiro (#t), todas as expressões no corpo dewhensão executadas em sequência. - Se
testfor falso (#f), nada acontece e nenhum valor é retornado.
Exemplo
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))Comparando if e when
Os dois juntos no mesmo exemplo:
(if (= 0 1)
(lumi-message "This will not run")
(when (< 0 1)
(lumi-message "The 'when' condition is true!")
(lumi-message "Executing additional actions within 'when'.")))Explicação
Condição do
if:- O teste
(= 0 1)verifica se 0 é igual a 1. - Como é falso (
#f), o ramoelseé executado.
- O teste
whenno ramoelse:- O teste
(< 0 1)verifica se 0 é menor que 1. - Como é verdadeiro (
#t), todas as expressões no corpo dewhensão executadas em sequência.
- O teste
Por que when?
- Evita um
elsevazio ou fictício. - Deixa claro que só o ramo verdadeiro importa.
Resumo
- Use
ifquando ambos os ramos importam. - Use
whenquando há apenas o ramo verdadeiro, especialmente com várias ações. - Combinar
ifewhenajuda a estruturar condições complexas de forma clara.