Documentos de Académico
Documentos de Profesional
Documentos de Cultura
13 Operador Ternario
13 Operador Ternario
Ir a la navegación Ir a la búsqueda
Muchos lenguajes de programación que utilizan la sintaxis del lenguaje C utilizan un operador
ternario,?:, que define una sentencia condicional. Dado que este operador es a menudo el único
operador ternario existente en el lenguaje de programación, a veces es referido simplemente
como "el operador ternario".
Este es también el caso en muchos lenguajes imperativos, empezando con ALGOL en el que
sería posible escribir resultado := if a > b then a else b, también Smalltalk
(resultado := (a > b) ifTrue: [ a ] ifFalse: [ b ]) o Ruby (resultado = if a >
b: a else b end).
Índice
1 Asignación condicional
2 Uso
o 2.1 C++
o 2.2 C#
2.2.1 Ejemplo
o 2.3 CFML (Railo)
2.3.1 Ejemplo 1
2.3.2 Ejemplo 2
o 2.4 Java, JSP
o 2.5 Perl, PHP
o 2.6 Python
o 2.7 Visual Basic .NET
3 Referencias
4 Enlaces externos
Asignación condicional
Uso
El uso más común de este operador ternario es hacer una breve sentencia condicional. Por
ejemplo, si queremos desarrollar código en C para cambiar las horas de apertura de una tienda a
12:00 del mediodía los fines de semana y 9 en punto entre semana, podemos usar:
int tiempo_de_apertura;
if (día == FIN_DE_SEMANA)
tiempo_de_apertura = 12;
else
tiempo_de_apertura = 9;
Las dos formas son casi equivalentes. Tenga en cuenta que el ?: es una expresión y if-then-else
una declaración. También hay que tomar en cuenta que ni el valor si es verdadero ni valor si
falso pueden ser omitidos en el operador ternario, lo cual resultaría en un error por el compilador.
Esto contrasta con sentencias de if..else, donde se puede omitir la cláusula else.
C++
En C++, hay situaciones donde el uso de asignación condicional de if-else no es posible, ya que
esta lengua distingue explícitamente entre inicialización y asignación. En tal caso, siempre es
posible utilizar una llamada a la función, pero esto puede ser incómodo y poco elegante. Por
ejemplo, si desea pasar valores con condiciones diferentes como un argumento para un
constructor de un campo o una clase base, no es posible utilizar un simple if-else, en este caso
podemos usar una expresión de asignación condicional, o una llamada a la función. Hay que
tomar en cuenta también que algunos tipos permiten la inicialización, pero no permiten la
asignación, o incluso el operador de asignación hace cosas totalmente diferente a la del
constructor. Esto último es válido para los tipos de referencia, por ejemplo:
#include <iostream>
#include <fstream>
#include <string>
En este caso no hay posibilidad de sustituir el uso del operador ?: con un if-else. (Aunque se
puede sustituir el uso de ?: con una llamada a la función, dentro del cual puede ser un if-else.)
Además, el operador ternario puede dar un Ivalue, es decir, un valor al cual otro valor se le puede
asignar. Consideremos el siguiente ejemplo:
#include <iostream>
int main ()
{
int a=0, b=0;
}
}
/*
Resultado:
No es igual
*/
CFML (Railo)
Ejemplo 1
<cfscript>
arg = "T";
vehicle = ( ( arg == 'B' ) ? 'bus' :
( arg == 'A' ) ? 'airplane' :
( arg == 'T' ) ? 'train' :
( arg == 'C' ) ? 'car' :
( arg == 'H' ) ? 'horse' :
'feet' );
</cfscript>
<cfoutput>#vehicle#</cfoutput>
Ejemplo 2
<cfscript>
price = ( product.hasPrice() ) ? product.getPrice() : "-";
writeOutput( "Precio del producto: " & price );
</cfscript>
Java, JSP
boolean mayor_de_edad;
if(edad >= 18){
mayor_de_edad = true;
}else{
mayor_de_edad = false;
}
Para utilizar el operador ternario en JavaServer Pages, se puede incrustrar código de Java usando
scriptlets. Esta manera no es recomendada, lo cual se sugiere usar bibliotecas de JSTL para
obtener código más limpio y estructurado. Por ejemplo, para alternar el color de las filas en una
tabla de HTML usando CSS, pudiéramos utilizar lo siguiente:
Desde la versión 5.3, PHP soporta una sintaxis del operador ternario. En esta forma, la condición
es regresada a menos que la condición se evalúa como falsa:
Aunque se había demorado durante varios años por los desacuerdos sobre la sintaxis, un
operador ternario para Python se aprobó como Python Enhancement Proposal 308 y se añadió a
la versión 2.5 en septiembre de 2006. El operador ternario de Python difiere del común ?: en el
orden de sus operandos. La forma general es:
A pesar de que .NET no utiliza los operandos ?: se puede usar una implementación muy similar a
la sentencia if...else.
En el ejemplo anterior, IIF es una función, y no un operador ternario real. Como función, los
valores de las tres partes se evalúan antes de que se produzca llamada de la función. Esto impuso
limitaciones y en Visual Basic. NET 9.0, lanzado como Visual Studio 2008, un operador ternario
real fue introducido usando como clave IF en vez de IIF. Esto permite que el siguiente código
funcione: