Expresiones booleanas
Una expresión booleana es una variable, constante, método, o un conjunto de ellos combinados con operadores booleanos lógicos que, al ejecutarse, devuelven siempre verdadero o falso.
Las expresiones booleanas son necesarias en los bucles y estructuras condicionales, ya que en función del resultado de la expresión, se modificará el flujo del programa.
La expresión booleana más sencilla, son las propias constantes true y false, aunque una variable que contenga true o false es también una expresión booleana.
Otras expresiones booleanas pueden ser:
x objeto.propiedad mifuncion() (b and c) or d a > 1 a < otrafuncion() objeto.propiedad <= 23 x != y b == true tercerafuncion() && var || objeto.propiedad > 3
Todas estas expresiones pueden devolver true o false.
Ver operadores.
Conversión
Una expresión booleana puede devolver un valor de cualquier tipo aunque no sea booleana, ya que será convertido a true o false en función de los siguientes casos
- Si el valor es booleano, entonces devuelve el propio valor
trueofalse - Si el valor es
null, entonces devuelvefalse - Si el valor es de tipo numérico, un valor 0 es tomado como
falsey cualquier otro valor comotrue - Si el valor es de tipo Char, un valor '0' es tomado como
falsey cualquier otro carácter comotrue - Si el valor es de tipo String o cualquier otro objeto, devolverá
truesi no esnull(y devolverá @false@ si esnull, como se explica en el segundo punto)
Más información en OGNL: Chapter 5. Coercion Objects to Types (http://www.opensymphony.com/ognl/html/LanguageGuide/coercion.html#coerceBoolean)
Esto puede ayudar a la validación de parámetros para averiguar si se han enviado o no. En el siguiente ejemplo, la función pintar() espera un parámetro mensaje de tipo String. Para validar si el parámetro enviado es null, simplemente se hace un if mensaje en vez de if mensaje != null, pues el resultado es equivalente:
def main
pintar("texto")
pintar()
end
def pintar(mensaje)
if mensaje
println mensaje
else
println "Error parámero es null. Debe especificar el mensaje a imprimir."
endif
end