Operador Ternario ?: (operador condicional)
Publicado el 13 de octubre de 2009El operador ternario ?:
en programación es una forma de hacer operaciones condicionales con 3 parámetros. La forma básica de aplicarlo es la siguiente:
expresión1 ? expresión2 : expresión3 |
Se evalúa la expresión1
, y si su resultado es verdadero, entonces se evalúa y devuelve como resultado la expresión2
. Si expresión1 es falso, se evalúa y devuelve expresión3
. En este caso, es equivalente a escribir:
if (expresión1) { expresión2; } else { expresión3; } |
Otra forma de interpretar el orden de los factores sería:
condición ? valor_si_es_verdadero : valor_si_es_falso |
Generalmente es bastante cómodo usarlo para asignarle un valor a una variable según el valor booleano de otra. Esto se podría escribir así (PHP):
if ($haceFrio) { $variable = "Hace frío"; } else { $variable = "No hace frío"; } |
Pero con el operador ternario quedaría en una sola línea así:
$variable = ($haceFrio) ? "Hace frío" : "No hace frío"; |
También se puede resumir, en algunos lenguajes, omitiendo el valor del medio. De esta forma expresión1 ? : expresión3 retorna expresión1 si es Verdadero, y expresión3 de otra forma.
Al principio me resultaba un poco confuso, pero al entenderlo es bastante simple. Ahorra algo de tiempo y líneas a la hora de escribir código. Y al tener claro el concepto, es bastante simple identificarlo y entender el código. Espero que sirva de referencia para empezar a usarlo 😀
Existe en Ruby, PHP, Python, Java, C y C++, cada uno con su sintaxis. (Si saben de algún otro lenguaje que lo implemente, avisen en los comentarios y lo agrego).
Hace poco tiempo aprendí a programar con este operador. Se lo debo a Grilix, que me enseñó a usarlo después de que lo viera varias veces en su código PHP, siempre seguido de un WTF? por mi parte. Aprovechando el hecho de haber aprendido algo nuevo, lo comparto por acá.
32 comentarios en este post
Feed de comentarios-
HAML – Atributo condicional en etiqueta HTML | Picando Código |
4 julio. 2013 - 09:01
[…] usa el operador ternario. Si la condición da verdadera, se agrega el atributo class="active" a la etiqueta tr, en caso […]
-
Intrigado con Scala – parte 1 | Picando Código |
16 octubre. 2013 - 10:30
[…] ese mismo ejemplo usa el operador ternario que no está disponible en Scala. Esto es porque el if no es una sentencia, es una expresión que […]
-
Validación básica en Rails 4 – mensajes en formulario | AFelipe - Blog |
23 junio. 2014 - 23:06
[…] una expresión ternaria para comprobar si el atributo tiene un […]
johnboyd 13 octubre. 2009 - 05:22
una vez más ruby demuestra por qué es el mejor de todos
http://invisibleblocks.wordpress.com/2007/06/11/rubys-other-ternary-operator/
alvaro 13 octubre. 2009 - 06:05
Ruby y Perl también tienen operador ternario.
Supongo que a los derivados .NET no les faltará, seguramente casi todos los lenguajes lo tengan jeje (aunque no por ello es meno útil!!).
Un saludo.
Bruno 13 octubre. 2009 - 08:56
No se si se puede llamar operador ternario pero en Smalltalk quedaria algo asi:
Donde #ifTrue:ifFalse: es un MENSAJE el objeto que es una subinstancia de Boolean (True o False). y son dos instancias de BlockClosure (“un bloque de codigo”).
No se si cuenta como ternario…
Saludos,
Bruno
Bleach 13 octubre. 2009 - 11:18
También lo tiene C#
Arlequín 13 octubre. 2009 - 11:58
Está bueno ese operador. Yo lo conocí cuando aprendí C y le llamábamos “asignación condicional”.
Gonzalo Arreche 13 octubre. 2009 - 15:46
En perl existe algo mas divertido también:
Aunque esto se puede hacer en PHP:
O también podrias (payando a partir de este punto)…
Y ni quiero ponerme a pensar en tokens.. jaja 😛
andres 13 octubre. 2009 - 15:51
Ese operador lo tienen practicamente todos los lenguajes.
El que da el ejemplo de ruby… esa funcionalidad no solo la tiene ruby, sino que hay varios lenguajes funcionales que lo implementan. Igualmente esa funcionalidad depende mas de como el lenguaje implementa la comparacion (devolviendo la referencia del primer elemento q de true), este tipo de cosas se puede hacer principalmente en lenguajes totalmente dinámicos, funcionales, etc, mas q en lenguajes tipo php, c#, java….
Saludos!
Gonzalo Arreche 13 octubre. 2009 - 16:12
Creo que a pesar de que es un operador bastánte poco complejo, se merece un BIEN ENCARADO !, al haber aprendido esto :P.. enhorabuena !! jajaja
Dark Musician 13 octubre. 2009 - 17:13
Sí, casi todos los lenguajes tienen eso.
Alejandro Segovia 13 octubre. 2009 - 22:05
En Python también se puede hacer, pero con una sintaxis bastante distinta:
variable = hace_frio and “Hace Frio” or “No Hace Frio”
Saludos!
hugo_dc 14 octubre. 2009 - 01:50
Yo aprendí a usarlo en JavaBat 🙂
http://clinuxera.org/hugo-dc/?p=71
HacKreatorz 14 octubre. 2009 - 03:46
Los programas que hago en VisualBasic.NET y en Gambas están llenas de este operador ya que lo puedo usar para muchísimas excepciones que pongo en el código.
reasons 16 octubre. 2009 - 09:28
ActionScript también lo tiene (al menos desde la versión 2.0)
esutoraiki 4 marzo. 2011 - 03:59
Si es cierto AS2 tiene el operador ternario el cual es llamado operador condicional el cuál aparece dentro de la lista de los operadores. Lo mismo aplica en AS3
Andrés Tarallo 21 octubre. 2009 - 13:22
Al menos en C se recomendaba utilizarlo con cuidado. Era facil construir expresiones donde no quedara claro, a primera vista, el resultado de la expresion.
Christian Cisneros 27 enero. 2013 - 02:45
Muchas buena informacion! Gracias!
Luis 11 marzo. 2013 - 11:31
Excelente!
charlie 25 julio. 2014 - 15:38
esta igual en ActionScript3.0
justo lo acabo de agregar en el trabajo
aki esta la linea.
sprite.alpha = (visibilidad)?0 : 1;
GAbi 14 octubre. 2015 - 15:07
En javascript también se usa!
miguel angel 6 abril. 2016 - 15:27
en tu post dices que puedes omitir el valor del centro,
“también se puede resumir, en algunos lenguajes, omitiendo el valor del medio. De esta forma expresión1 ? : expresión3 retorna expresión1 si es Verdadero, y expresión3 de otra forma.”
en ese caso donde se evalua la expresion?
mermelado 25 julio. 2016 - 17:04
Hola a todos:
A mi me falla si en verdadero pongo varias instrucciones separadas con ;
php da error, sin embargo en false admite varias instrucciones separadas por ;
¿Raro no?
TheFlash 28 diciembre. 2016 - 16:57
Aunque el artículo es de 2009, escribo este comentario porque me ha resultado de bastante ayuda. Llevaba viendo este operador desde hace tiempo en un montón de libros y no tenia ni idea para que servía, la verdad es que es bastante más económico a la hora de escribir código que usar las sentencias condicionales.
Fernando 29 diciembre. 2016 - 15:32
Buenísimo que el artículo todavía siga ayudando gente 🙂
¡Gracias por comentar!
Yerlin Matu 9 marzo. 2017 - 12:25
JavaScript también lo utiliza.
¡Saludos!
LeonardoCM 18 abril. 2017 - 13:16
Excelente artículo publicado antes de que aprendiera a programar jajaja… Me gusta mucho usar este operador en PHP saludos!
Francsico Riascos 20 septiembre. 2017 - 13:30
Muy bien explicado.
aj 23 febrero. 2018 - 19:55
Ahhhhhhhhhhhhhhhhhhhhhh!!!!!
ivan mrsnik 14 abril. 2018 - 19:50
Porque estas 2 lineas casi iguales presentan en el echo datos diferentes
La unica diferencia el primero no asigna valor, en la segunda asigna el valor
ERUBIEL MUÑOZ 27 septiembre. 2019 - 21:41
hay veces que las instrucciones no me las toma en cuenta. 🙁