Aquí tienes un ejemplo rápido de código fuente de Ruby, que muestra cómo he utilizado el operador ternario de Ruby en un método que imprime un registro CSV para una clase que he definido:
def print_csv_record last_name.length==0 ? printf(",") : printf("\"%s\",", last_name) first_name.length==0 ? printf(",") : printf("\"%s\",", first_name) city.length==0 ? printf(",") : printf("\"%s\"", city) printf("\n")end
Como puedes ver en ese método, cada línea utiliza el operador ternario para tomar la siguiente decisión:
- Si la longitud del campo dado es igual a 0, utiliza la primera sentencia
printf
. - De lo contrario, utilice la segunda sentencia
printf
.
Puede parecer poco, pero es así. Lo bueno es que es mucho más corto que la sintaxis equivalente if
/then
, y sigue siendo muy fácil de leer.
Si quieres un poco más de información sobre el operador ternario de Ruby, no dudes en seguir leyendo.
Sintaxis general del operador ternario
Como puedes deducir del ejemplo anterior, la sintaxis general del operador ternario de Ruby tiene este aspecto:
test-expression ? if-true-expression : if-false-expression
En mi ejemplo anterior, mi primer test-expression
tenía este aspecto:
last_name.length==0
y su if-true-expression
se veía así:
printf(",")
y su if-false-expression
se veía así:
printf("\"%s\",", last_name)
Con suerte, demostrar la sintaxis general del operador ternario ayudó a hacer mi código anterior un poco más comprensible.
Un segundo ejemplo
Si quieres un ejemplo más del operador ternario, aquí tienes uno que utiliza una comparación de prueba numérica, seguida de dos posibles sentencias puts
, una que se ejecutará si la prueba se evalúa como verdadera, y otra que se ejecutará si la prueba se evalúa como falsa:
# set the speedspeed = 90# somewhere later in the program ...speed > 55 ? puts("I can't drive 55!") : puts("I'm a careful driver")
Como se puede adivinar, este segmento de código imprimirá:
I can't drive 55!
(Que también resume mis hábitos de conducción.)
El operador ternario es genial. Puede acortar tus declaraciones if
/then
, y aún así mantener tu código Ruby legible.