Ínidce
1 - Qué es el operador ternario
Como sabemos del post de la sentencia de toma de decisiones, C# nos permite tomar decisiones mediante condicionales, if
por ejemplo.
C# Incluye un tipo de toma de decisiones especial, llamado operador ternario
, el cual se representa con el carácter ?
y nos devolverá, siempre un booleano
, por lo tanto true
o false
.
La sintaxis de la sentencia es así:
Expresión booleana ? sentencia 1 : sentencia 2;
Como puedes observar la sentencia contiene tres partes:
- La expresión booleana; La cual nos devolverá verdadero o falso. (antes del simbolo de cerrar la interrogación
?
) - Sentencia 1; es la expresión que se va a devolver en caso de que la expresión booleana sea
true
. (antes de los dos puntos:
) - Sentencia 2; Es la expresión que se va a devolver en caso de que la expresión devuelve
false
;
Por lo tanto podemos ver la expresión ternaria como:
resultado = condicion ? true : false;
1.1 - Convertir If en un operador ternario
En este ejemplo veremos el resultado de comprobar si una persona es mayor de 18 años o no con un if normal.
if (mayoriaEdad <= edadActual)
{
resultado = "El usuario es mayor de edad";
}
else
{
resultado = "El usuario es menor de edad";
}
Y posteriormente con un operador ternario:
resultado = mayoriaEdad <= edadActual ? "El usuario es mayor de edad" : "El usuario es menor de edad";
Como podemos observar queda todo mucho mas limpio, pero, veamos en detalle como ha sido la transformación:
2 - Operadores ternarios anidados
Por supuesto cabe destacar que podemos ejecutar operadores ternarios anidados, osea uno dentro de otro. y estos se ejecutan de derecha a izquierda, no de izquierda a derecha.
- Supongamos el ejemplo que la mayoría de edad son 18
- La edad para ingerir bebidas alcohólicas son 21
- Y finalmente la edad para conducir son 25
Por lo tanto tendremos 3 condicionales y un total de 7 opciones en la ecuación.
int mayoria = 18, votar = 21, conducir = 25, edadactual=25;
resultado = conducir <= edadactual ? "puede conducir y votar" : votar <= edadactual ?
"puede votar" : mayoria <= edadactual ?
"es mayor de edad" : "No puede hacer nada";
lo cual lo podemos traducir en lo siguiente a ? b : c ? d : e ? f : g
que se evalua como a ? b : (c ? d : (e ? f : g))
Por lo que si hacemos un pequeño cambio en el código anterior y cambiamos el orden de la mayoría de edad y conducir
resultado = mayoria <= edadactual ? "es mayor de edad" : votar <= edadactual ?
"puede votar" : conducir <= edadactual ?
"puede conducir" : "No puede hacer nada";
Como podemos observar comúnmente utilizaremos expresiones ternarias para reemplazar un pequeño if else
, y nos ayudara a tener un código más limpio.