sábado 22 de marzo de 2008

Operador Ternario "?" en C/C++

Últimamente varias personas me han consultado que significa por ejemplo esta sentencia en C/C++:

x=1;
x= (x == 1) ? 0:1;

Pues bien, esto se llama "Operación Ternaria de "?"", y en si es un método bastante popular pues se ha implementado en otros lenguajes de programación como Java o C#.

En si es bastante simple, no es mas que la abreviación y abstracción del clásico if...else...if que podemos encontrar en prácticamente todos los lenguajes de programación de alto nivel (HLPL - High Level Programming Language).

De lo que se trata es de tener 3 expresiones (a modo básico, se pueden anidar mas) donde las escribimos de esta forma:

E1 ? E2:E3;

E1: La condición que íria como argumento de un bloque if.
E2: En caso que E1 sea true.
E3: En caso que E1 sea false.

Si lo convertimos en nuestros bloques comunes queda algo como:

if (E1) {E2;} else {E3;}

Como ven, es una forma bastante abstracta de escribir lo mismo y que sirve principalmente para condicionar de manera rápida una expresión, por ejemplo:

for (i = 0; i != n; i++)
printf ("%6d%c", a[i], (i%10==9 || i==n-1) ? '\n' : ' ');

o mas útil aún:

printf ( "Tienes %d item%s.\n", n, n==1 ? "" : "s");

Espero que eso resuelva algunas dudas, el uso de este método de abstracción es idéntico en Java.
____________________________
Enlances:
http://www.zator.com/Cpp/E4_9_6.htm
http://www.cafeaulait.org/course/week2/43.html