5.02. Expresiones y condiciones anidadas
Anidar inputs, operadores y funciones
Es muy normal que en nuestras fórmulas usemos funciones, operadores e input values dentro de otras funciones. Esto se conoce como anidado o nesting.
Cuando combinamos inputs, operadores y/o funciones de manera que devuelvan un sólo valor, se conoce como expresión. Las expresiones pueden ser tan sencillas o complejas como queramos, siempre y cuando devuelvan un sólo valor.
Esto implica que los argumentos de una función no tienen por qué ser sólo una referencia a una propiedad o un valor literal; cualquier expresión puede ser a su vez un argumento siempre y cuando devuelva un valor único y éste sea del tipo correcto.
Por ejemplo, la sencilla fórmula add(100, 20) nos devolverá el resultado de sumar 100 y 20.
Pero podríamos convertirla en una expresión más complicada:
add(100, multiply(10, 2))
En este caso, el segundo argumento es el resultado de una función multiply() a la que hemos pasado como argumentos 10 y 2. Ambas operaciones darán como resultado: 120.
Un ejemplo algo más complicado, introduciendo como valores las referencias a otras propiedades:
Si quisiéramos calcular el precio total de un item aplicándole un IVA diferente:
add(prop("Precio"), multiply(prop("Precio"), prop("IVA")))
Primero, multiplicaríamos el Precio por el IVA → multiply(prop("Precio"), prop("IVA"))
Y ese resultado lo sumaríamos al Precio →
Condiciones anidadas
El fenómeno de anidado lo encontraremos sobre todo con las funciones de tipo if(). Es decir, las funciones que nos sirven para comprobar si se cumple una condición o no:
if(2 == 1, "Igual", "No es igual") → "No es igual"
Un uso muy común sería el de marcar como check una propiedad si esta se encuentra en estado "Completado":
if(prop("Status") == "completada", true, false)
También podemos usar las funciones and() y or() para comprobar dos expresiones diferentes:
if(and(prop("Pagado"), prop("Enviado")), "Completado", "En Progreso")
En esta fórmula estamos comprobando si un producto está tanto "Pagado" como "Enviado", en cuyo caso aparecería como "Completado". En caso contrario, "En progreso".
Por último, es posible que queramos mayor granularidad que un true o false. Podemos anidar condiciones:
if(prop("Mood") == "feliz", "😀", if(prop("Mood") == "apático", "😕", "😩"))
Esto se traduciría en:
- Si "Mood" es "feliz", muestra "😀"
- Si lo anterior no se cumple, si "Mood" es "apático", muestra "😕"
- Si no se cumple ninguna de las anteriores, muestra "😩"
¿Te ha resultado útil este contenido?