Operador ternario en C#

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:

  1. La expresión booleana; La cual nos devolverá verdadero o falso. (antes del simbolo de cerrar la interrogación ?)
  2. 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 :)
  3. 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:

if to ternary operator

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.