fbpx
Wikipedia

Operador ternario

En informática un operador ternario (a veces incorrectamente llamado operador terciario) es un operador que toma tres argumentos. Este operador ternario puede pasar varias líneas de código a una sola línea en lenguajes que puedan usarlo tales como JavaScript, C, C# o Java. Los argumentos y el resultado puede ser de diferentes tipos. Originalmente proviene de BCPL, cuyo sintaxis equivalente para e1 ? e2: e3 era e1 -> e2, e3.[1]​ Lenguajes derivados del BCPL tienden a aparecer con este operador.

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".

La mayoría de los lenguajes de programación que se enfatizan en la programación funcional no necesitan dicho operador como su expresión regular condicional (s) es una expresión en primer lugar, por ejemplo, la expresión sistema (si (a>b) ab) es equivalente en la semántica de la expresión C (a> b)? a: b.

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).

Asignación condicional editar

La sintaxis del operador ternario (?:) se utiliza como sigue:[2]

expresión boleana ? valor si cierto : valor si falso 

La condición es evaluada verdadera o falsa como una expresión booleana. Sobre la base de la evaluación de la condición de Booleana, la expresión entera devuelve valor si cierto si la condición es verdadera, pero valor si falso en caso contrario. Por lo general, las dos sub-expresiones valor si cierto y valor si falso deben tener el mismo tipo, lo cual determina el tipo de toda la expresión. La importancia de este tipo de control se encuentra en el uso más común del operador --en declaraciones de asignación condicional. En este uso aparece como una expresión en el lado derecho de una sentencia de asignación, de la siguiente manera:

variable = condición ? valor si cierto : valor si falso 

El operador ?: es similar a la manera como funcionan las expresiones condicionales (if-then-else) en lenguajes de programación funcional, como Scheme, ML y Haskell, puesto que if-then-else forma una expresión en lugar de una declaración en esos idiomas.

Uso editar

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 = (día == FIN_DE_SEMANA) ? 12 : 9; 

en lugar del código más detallado

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++ editar

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>   using namespace std;   int main(int argc, char *argv[]) {  string name;  ofstream fout;  if (argc > 1 && argv[1])  {  name = argv[1];  fout.open(name.c_str(), ios::out | ios::app);  }    ostream &sout = name.empty() ? cout : fout; } 

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;    const bool cond = ...;  (cond ? a : b) = 1;  std::cout << "a=" << a << ','  << "b=" << b << '\n';  } 

C# editar

Ejemplo editar

class Ejemplo {  static void Main()  {  var a = 0;  var b = 1;  var r = a == b ? "Es igual" : "No es igual";  Console.WriteLine(r);  } } /* Resultado: No es igual */ 

CFML (Railo) editar

Ejemplo 1 editar

<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 editar

<cfscript> price = ( product.hasPrice() ) ? product.getPrice() : "-"; writeOutput( "Precio del producto: " & price ); </cfscript> 

Java, JSP editar

En Java el operador ternario es también referido como el operador condicional y utiliza la misma sintaxis que los demás lenguajes basados en el lenguaje C. Por ejemplo, para verificar que una persona es mayor de edad, utilizaríamos lo siguiente:

 boolean mayor_de_edad = edad >= 18 ? true: false; 

Remplazaria el siguiente código detallado:

 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:

 <c:forEach list="${requestScope.miLista}" varStatus="contador"> <tr class="${contador % 0 ? 'even' : 'odd'}"> <td>Hola Mundo!!!</td> </tr> </c:forEach> 

Perl, PHP editar

Un constructor tradicional de if-else en Perl o PHP se escribiría así:

if ($a > $b) {  $result = $a; } else {  $result = $b; } 

Reescrito con el operador ternario, se vería así:

$result = ($a > $b) ? $a : $b; 

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:

 $variable = condicion ?: if false 

Python editar

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:

valor_si_cierto if condición else valor_si_falso 

Visual Basic .NET editar

A pesar de que .NET no utiliza los operandos ?: se puede usar una implementación muy similar a la sentencia if...else.

Dim tiempo_de_apertura As Integer = IIf((dia = FIN_DE_SEMANA), 12, 9)   'sintaxis general es IIf(condicion, valor_si_cierto, valor_si_falso) 

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:

Dim nombre As String = If(persona Is Nothing, "", persona.Nombre) 

Usando IIF, persona.Nombre se evaluaría incluso si el valor de persona es nothing (nulo), causando una excepción. Con un verdadero operador ternario de cortocircuito, persona.Nombre sólo se evalúa si el valor de persona no es nulo.

Referencias editar

  1. . BCPL Reference Manual. Archivado desde el original el 27 de febrero de 2008. 
  2. . Kwista, LLC. Archivado desde el original el 25 de abril de 2010. Consultado el 19 de abril de 2010. 

Enlaces externos editar

  • Descripción del operador ternario en C#
  • Descripción del operador ternario en Visual Basic
  • Descripción del operador ternario en Python (PEP 308)
  • Descripción del operador ternario en Java
  • Descripción del lenguaje PHP
  • Especificación del lenguaje Visual Basic 9.0
  •   Datos: Q30242779

operador, ternario, debe, confundirse, operación, ternaria, informática, operador, ternario, veces, incorrectamente, llamado, operador, terciario, operador, toma, tres, argumentos, este, operador, ternario, puede, pasar, varias, líneas, código, sola, línea, le. No debe confundirse con Operacion ternaria En informatica un operador ternario a veces incorrectamente llamado operador terciario es un operador que toma tres argumentos Este operador ternario puede pasar varias lineas de codigo a una sola linea en lenguajes que puedan usarlo tales como JavaScript C C o Java Los argumentos y el resultado puede ser de diferentes tipos Originalmente proviene de BCPL cuyo sintaxis equivalente para e1 e2 e3 era e1 gt e2 e3 1 Lenguajes derivados del BCPL tienden a aparecer con este operador Muchos lenguajes de programacion que utilizan la sintaxis del lenguaje C utilizan un operador ternario que define una sentencia condicional Dado que este operador es a menudo el unico operador ternario existente en el lenguaje de programacion a veces es referido simplemente como el operador ternario La mayoria de los lenguajes de programacion que se enfatizan en la programacion funcional no necesitan dicho operador como su expresion regular condicional s es una expresion en primer lugar por ejemplo la expresion sistema si a gt b ab es equivalente en la semantica de la expresion C a gt b a b Este es tambien el caso en muchos lenguajes imperativos empezando con ALGOL en el que seria posible escribir resultado if a gt b then a else b tambien Smalltalk resultado a gt b ifTrue a ifFalse b o Ruby resultado if a gt b a else b end Indice 1 Asignacion condicional 2 Uso 2 1 C 2 2 C 2 2 1 Ejemplo 2 3 CFML Railo 2 3 1 Ejemplo 1 2 3 2 Ejemplo 2 2 4 Java JSP 2 5 Perl PHP 2 6 Python 2 7 Visual Basic NET 3 Referencias 4 Enlaces externosAsignacion condicional editarLa sintaxis del operador ternario se utiliza como sigue 2 expresion boleana valor si cierto valor si falso La condicion es evaluada verdadera o falsa como una expresion booleana Sobre la base de la evaluacion de la condicion de Booleana la expresion entera devuelve valor si cierto si la condicion es verdadera pero valor si falso en caso contrario Por lo general las dos sub expresiones valor si cierto y valor si falso deben tener el mismo tipo lo cual determina el tipo de toda la expresion La importancia de este tipo de control se encuentra en el uso mas comun del operador en declaraciones de asignacion condicional En este uso aparece como una expresion en el lado derecho de una sentencia de asignacion de la siguiente manera variable condicion valor si cierto valor si falso El operador es similar a la manera como funcionan las expresiones condicionales if then else en lenguajes de programacion funcional como Scheme ML y Haskell puesto que if then else forma una expresion en lugar de una declaracion en esos idiomas Uso editarEl uso mas comun de este operador ternario es hacer una breve sentencia condicional Por ejemplo si queremos desarrollar codigo en C para cambiar las horas de apertura de una tienda a 12 00 del mediodia los fines de semana y 9 en punto entre semana podemos usar int tiempo de apertura dia FIN DE SEMANA 12 9 en lugar del codigo mas detallado int tiempo de apertura if dia 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 expresion y if then else una declaracion Tambien 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 resultaria en un error por el compilador Esto contrasta con sentencias de if else donde se puede omitir la clausula else C editar En C hay situaciones donde el uso de asignacion condicional de if else no es posible ya que esta lengua distingue explicitamente entre inicializacion y asignacion En tal caso siempre es posible utilizar una llamada a la funcion pero esto puede ser incomodo 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 expresion de asignacion condicional o una llamada a la funcion Hay que tomar en cuenta tambien que algunos tipos permiten la inicializacion pero no permiten la asignacion o incluso el operador de asignacion hace cosas totalmente diferente a la del constructor Esto ultimo es valido para los tipos de referencia por ejemplo include lt iostream gt include lt fstream gt include lt string gt using namespace std int main int argc char argv string name ofstream fout if argc gt 1 amp amp argv 1 name argv 1 fout open name c str ios out ios app ostream amp sout name empty cout fout 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 funcion dentro del cual puede ser un if else Ademas el operador ternario puede dar un Ivalue es decir un valor al cual otro valor se le puede asignar Consideremos el siguiente ejemplo include lt iostream gt int main int a 0 b 0 const bool cond cond a b 1 std cout lt lt a lt lt a lt lt lt lt b lt lt b lt lt n C editar Ejemplo editar class Ejemplo static void Main var a 0 var b 1 var r a b Es igual No es igual Console WriteLine r Resultado No es igual CFML Railo editar Ejemplo 1 editar lt cfscript gt arg T vehicle arg B bus arg A airplane arg T train arg C car arg H horse feet lt cfscript gt lt cfoutput gt vehicle lt cfoutput gt Ejemplo 2 editar lt cfscript gt price product hasPrice product getPrice writeOutput Precio del producto amp price lt cfscript gt Java JSP editar En Java el operador ternario es tambien referido como el operador condicional y utiliza la misma sintaxis que los demas lenguajes basados en el lenguaje C Por ejemplo para verificar que una persona es mayor de edad utilizariamos lo siguiente boolean mayor de edad edad gt 18 true false Remplazaria el siguiente codigo detallado boolean mayor de edad if edad gt 18 mayor de edad true else mayor de edad false Para utilizar el operador ternario en JavaServer Pages se puede incrustrar codigo de Java usando scriptlets Esta manera no es recomendada lo cual se sugiere usar bibliotecas de JSTL para obtener codigo mas limpio y estructurado Por ejemplo para alternar el color de las filas en una tabla de HTML usando CSS pudieramos utilizar lo siguiente lt c forEach list requestScope miLista varStatus contador gt lt tr class contador 0 even odd gt lt td gt Hola Mundo lt td gt lt tr gt lt c forEach gt Perl PHP editar Un constructor tradicional de if else en Perl o PHP se escribiria asi if a gt b result a else result b Reescrito con el operador ternario se veria asi result a gt b a b Desde la version 5 3 PHP soporta una sintaxis del operador ternario En esta forma la condicion es regresada a menos que la condicion se evalua como falsa variable condicion if false Python editar Aunque se habia demorado durante varios anos por los desacuerdos sobre la sintaxis un operador ternario para Python se aprobo como Python Enhancement Proposal 308 y se anadio a la version 2 5 en septiembre de 2006 El operador ternario de Python difiere del comun en el orden de sus operandos La forma general es valor si cierto if condicion else valor si falso Visual Basic NET editar A pesar de que NET no utiliza los operandos se puede usar una implementacion muy similar a la sentencia if else Dim tiempo de apertura As Integer IIf dia FIN DE SEMANA 12 9 sintaxis general es IIf condicion valor si cierto valor si falso En el ejemplo anterior IIF es una funcion y no un operador ternario real Como funcion los valores de las tres partes se evaluan antes de que se produzca llamada de la funcion 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 codigo funcione Dim nombre As String If persona Is Nothing persona Nombre Usando IIF persona Nombre se evaluaria incluso si el valor de persona es nothing nulo causando una excepcion Con un verdadero operador ternario de cortocircuito persona Nombre solo se evalua si el valor de persona no es nulo Referencias editar BCPL Ternary operator page 15 BCPL Reference Manual Archivado desde el original el 27 de febrero de 2008 Ternary Operators Kwista LLC Archivado desde el original el 25 de abril de 2010 Consultado el 19 de abril de 2010 Enlaces externos editarDescripcion del operador ternario en C Descripcion del operador ternario en Visual Basic Descripcion del operador ternario en Python PEP 308 Alternativas para expresiones del operador ternario Descripcion del operador ternario en Java Descripcion del lenguaje PHP Especificacion del lenguaje Visual Basic 9 0 nbsp Datos Q30242779 Obtenido de https es wikipedia org w index php title Operador ternario amp oldid 141663680, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos