Operador Condicional Ternario
Operador Condicional Ternario
Operador Condicional Ternario
:
En C, existe el operador condicional ( ?: ) el cual es conocido por su estructura
como ternario. El comportamiento de dicho operador es el mismo que una
estructura if - then - else del lenguaje BASIC (y de la funcin IIf de Visual Basic).
El operador condicional?: es til para evaluar situaciones tales como:
Si se cumple tal condicin entonces haz esto, de lo contrario haz esto otro.
Pues bien, el operador ternario toma tres operandos. Despus del primer operando se coloca el smbolo "?", y
entre el segundo y el tercero el smbolo ":". Es decir, toma la forma
a?b:c
El primer operando (a) debe ser una expresin que se evale a un valor booleano. El segundo y el tercero
pueden ser de cualquier tipo, pero la mayora de los lenguajes exigen que sean del mismo tipo.
Cuando escribimos una expresin de ese estilo, el compilador o intrprete evalan el primer operando (a), y si
es verdadero, el resultado de toda la expresin es el valor del segundo operando (b), y en caso de ser falso, el
resultado de toda la expresin es el tercer operando (c).
Bueno, bien... Y para qu vale?.... pues veamos algunos ejemplos:
En este trozo de cdigo, asignaremos valor a una variable dependiendo de una condicin:
if (z>9)
{
k=3;
}
else
{
k=8+z;
}
Pero poda haberse escrito utilizando el operador ternario de sta forma:
k=(z>9)?3:(8+z);
Otro ejemplo, dependiendo de una condicin queremos imprimir una frase u otra:
if (k==12)
{
Console.WriteLine("La variable k tiene un valor igual a 12");
}
else
{
Console.WriteLine("La variable k tiene un valor distinto de 12");
}
Nuevamente, podramos haber utilizado el operador ternario, por ejemplo:
Console.WriteLine("La variable k tiene un valor "
+(k==12)?"igual a":"distinto de"
+" 12");
Devolviendo un valor de retorno en un mtodo o funcin:
if (j>=45)
{
z=a+3;
}
else
{
z=a-30;
}
return z;
Podramos sustituirlo por:
z=(j>=45)?(a+3):(a-30);
return z;
O incluso por:
return ((j>=45)?(a+3):(a-30));
En fin... Los usos de ste operador son muy variados, y como se puede apreciar, en muchas ocasiones
simplifica bastante en cdigo. Aunque en sto, como en todo, hay opiniones para todos los gustos.
En cuanto a la eficiencia, se debe destacar que en muchas ocasiones, los compiladores son capaces de crear
cdigo bastante optimizado cuando se lo encuentran.
Quiz ests pensando que el funcionamiento del operador ternario se podra emular con una funcin o un
mtodo que aceptase tres parmetros: uno booleano y otros dos del mismo tipo. S... en efecto es as, pero
con salvedades. Algunos lenguajes ya disponen de ese mtodo... pero no es lo mismo que utilizar un
operador. Se nos plantean un par de problemas: en primer lugar, Qu tipo deberamos poner para el
segundo y tercer parmetro?, y en segundo lugar, un mtodo o funcin siempre implican trasiego a travs de
la pila, cosa que el operador ahorra.
En definitiva, si tu lenguaje dispone del operador ternario y te gusta, salo. Si no te gusta o no disponemos de
l, siempre podemos utilizar un if.