"El buen diseño es obvio. El gran diseño es transparente"
- Joe Sparano

Operador Ternario

3 minutos de lectura
Fecha: 7/4/2015

El operador ternario es una estructura de control presente en muchos lenguajes de programación, actualmente yo uso PHP, JAVASCRIPT, JAVA, RUBY… y todos ellos presentan este operador, tan temido cuando lo ves por primera vez, pero tan útil una vez que comprendes para que sirve.

Antes de continuar con cómo se utiliza ten presente que reducirás el código al usarlo, pero si los andas anidando y usando en exceso también reduces la legibilidad de este, comenzamos…

¿Cómo funciona el operador ternario?

Operador Ternario

Lo primero que tenemos que comprender es que lo que conseguimos con el operador ternario es lo mismo que conseguiríamos con el clásico condicional if/else, no hace falta explicar mucho para que sirve, imaginemos el siguiente código (el lenguaje que voy a usar en este caso es PHP)

if ($velocidad > 120){
$mensaje = "Circulas por encima del límite!";
} else {
$mensaje = "Estas dentro de lo permitido";
}

Básicamente este código evalúa si el valor de la variable velocidad es mayor que 120, y si introduce un mensaje u otro (if – si se cumple / else – si no se cumple), nada nuevo para vosotros. Bueno pues el operador ternario hace lo mismo pero con menos código…

$mensaje = ($velocidad > 120) ? 'Circulas por encima del límite!' : 'Estas dentro de lo permitido';

Esto resumido en un esquema es así:

Esquema Operador Ternario

Como verás dentro de la sentencia hay dos caracteres que no hay en la otra, la interrogación (?) y los dos puntos (:), y son ellos los encargados de que esto funcione y por tanto debemos comprender que hacen. La interrogación evalúa si es cierto o no la expresión que se encuentra a su izquierda en este caso comprueba si es cierto que el valor de la variable $velocidad es mayor que 120. Los dos puntos separan las dos posibles valores que devuelve, el primero es el que devuelve si se evalúa a true y el segundo si se evalúa a false.

Sintaxis en distintos idiomas

Como ya dije al principio este operador está presente en muchos idiomas, y es lógico ya que vemos su utilidad a la hora de simplificar el código, voy a poner su sintaxis en algunos de los que controlo con el ejemplo anterior, por si os sirve de ayuda en alguno de vuestros proyectos.

PHP
$mensaje = ($velocidad > 120) ? 'Circulas por encima del límite!' : 'Estas dentro de lo permitido';
JavaScript
var mensaje = ( velocidad > 120 ) ? 'Circulas por encima del límite!' : 'Estas dentro de lo permitido';
Java
String mensaje = velocidad > 120 ? "Circulas por encima del límite!" : "Estas dentro de lo permitido ";
Ruby
mensaje = velocidad > 120 ? "Circulas por encima del límite!" : "Estas dentro de lo permitido ";

Tambien podeis usarlo en C, C++, Phyton…

Como veis da igual el lenguaje, simplemente son 3 parámetros que están separados por una interrogación (?) y dos puntos (:), acerca de él repito hay buenas practicas que debemos usar para que el código no se complique.

Uso Práctico

Cuando está justificado usar este operador? Pues brujuleando un poco por Internet encontré varias opciones, como no voy a decir todas os dejo la que me parece más util, recoger los datos que enviamos entre páginas!

Como bien sabeis para pasar los datos de una pagina a otra usamos formularios y luego recogemos esa informacion en el otro lado generalmente guardandolas en variables, una comprobacion básica es saber si esos datos existen, porque si en vez de entrar a esa pagina a traves de la accion del formulario, lo hacemos directamente o desde otro sitio, la pagina no recibe esos valores y casca.

Por es comprobar si existe ese envio, y si no al menos nulleas la variable para que si despues la usas exista aunque tenga valor null, ¿como hacemos esto con el operador ternario?

$manzanas= isset($_POST['manzanas']) ? $_POST['manzanas'] : null;

De esta manera lo que le digo es: Si existe el parametro manzanas (enviado por POST), me guardas en la variable manzanas su valor y si no existe nulleas la variable…

En las versiones recientes de PHP puedes usar tambien esta forma

$manzanas= $_POST['manzanas'] ?: null;

Aquí ya se complica más ver que está pasando, no vemos por ninguna parte el parámetro central (el que está a después de la interrogación y antes de los dos puntos) que es la opción que devuelve cuando la condición que evalúa es verdadera, lo que está sucediendo es que si no lo ponemos, él por defecto entiende que esa opción debe devolver el valor de la expresión que evalúa. Por lo tanto esta sentencia hace lo mismo que la anterior, aunque la verdad es una forma bien rara y comprimida de escribirlo.