when
En Scheme, if es versátil, pero sin un else explícito puede confundir — sobre todo cuando solo debe ejecutarse la rama verdadera. Entonces when es más claro y conciso.
La forma básica de when:
(when test-is-true
do-this
do-that)- Si
#t, todas las expresiones del cuerpo se ejecutan en secuencia. - Si
#f, no ocurre nada; no se devuelve valor.
Ejemplo
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))Comparar if y when
Ambos juntos en el mismo ejemplo:
(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'.")))Explicación
if:(= 0 1)es falso, ramaelse.whenen elelse:(< 0 1)es verdadero; amboslumi-messagese ejecutan.
¿Por qué when?
- Sin
elsevacío o ficticio. - Deja claro que solo importa la rama verdadera.
Resumen
if: cuando importan ambas ramas.when: solo rama verdadera, varias acciones.- Combinarlos estructura condiciones complejas con claridad.