cuando
En Scheme, si bien if es elegante y versátil, puede resultar confuso cuando se usa sin un else explícito. Esto es particularmente cierto cuando la intención es ejecutar una sola rama de código solo cuando una condición es verdadera, sin ninguna acción alternativa para el caso false. En tales escenarios, la construcción when proporciona una alternativa más clara y concisa.
La forma básica de when se ve así:
(when test-is-true
do-this
do-that)- Si
testse evalúa como verdadero (#t), todas las expresiones en el cuerpo de la construcciónwhense ejecutan secuencialmente. - Si
testse evalúa como falso (#f), no sucede nada y no se devuelve ningún valor.
Ejemplo
(when (< 0 1)
(lumi-message "Condition is true!")
(lumi-message "Executing additional actions."))Contrastando if y when
Para comprender mejor la diferencia entre if y when, considere el siguiente ejemplo donde ambos se usan juntos:
(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:
La condición
if:- La prueba
(= 0 1)comprueba si 0 es igual a 1. - Como esto es falso (
#f), se ejecuta la ramaelsedelif.
- La prueba
La construcción
whenen la ramaelse:- La prueba
when(< 0 1)comprueba si 0 es menor que 1. - Dado que esto es cierto (
#t), todas las expresiones dentro del cuerpo delwhense ejecutan secuencialmente:- First, it prints
"The 'when' condition is true!". - Then, it prints
"Executing multiple actions within 'when'.".
- First, it prints
- La prueba
¿Por qué utilizar when aquí?
- Usar
whenen lugar de otroifsimplifica la lógica cuando no hay necesidad de una ramaelseexplícita para la condición. whendeja claro que solo la rama verdadera es relevante, lo que reduce la posible confusión.
Resumen
- Utilice
ifcuando necesite tanto una rama verdadera como una falsa. - Utilice
whencuando solo haya una rama para el caso real, especialmente cuando se deben ejecutar múltiples acciones. - Combinar
ifywhenpuede ayudar a estructurar condicionales más complejos de forma clara y concisa.