22 de Septiembre, 2005

Operador ternario o "?:"

Este es uno de los operadores que más me costaba utilizar cuando aprendí a programar en C hace años y, solo hasta hace un rato :), ignoraba que existiera en PHP.

Es un gran descubrimiento, porque nos permite simplificar el código en muchos casos en los que hay que hacer una asignación u otra en función de una condición.

Supongamos que queremos construir una cadena que indique el número de comentarios que hay en una anotación. La forma que emplearíamos sin el operador ternario sería tal que:

$cadena="Hay " .$n_comentarios;

if($n_comentarios!=1)
	$cadena=$cadena ." comentarios";
else
	$cadena=$cadena ." comentario";

echo $cadena;

De esta forma obtendríamos algo como:

Hay 0 comentarios
Hay 1 comentario
Hay 2 comentarios
Hay 3 comentarios
...

Bien, pues el operador ternario o "?:" funciona de la siguiente manera:

expresión1 ? expresión2 : expresión3

Donde el operador valdrá expresión2 si expresión1 es cierto, o valdrá expresión3 si es falso.

De esta forma el código anterior podría ser tan sencillo como:

$cadena="Hay " .$n_comentarios
	.($n_comentarios!=1 ? " comentarios" : " comentario");

echo $cadena;

En realidad es muy fácil de utilizar, lo único que su forma un tanto extraña hace que muchas veces no lo tengamos en cuenta cuando sería la forma más adecuada de resolver nuestro problema.

Anotación por Juan J. Martínez, clasificada en: php.

Hay 2 comentarios

Gravatar

Conocía su existencia en C pero como tú, ignoraba que estuviera implementado en PHP. Antes tenía una pequeña rutina para lo mismo con los comentarios y trackbacks idéntica a ésta. Curioso.

por r0sk, en 2005-09-23 10:42:55

Gravatar

No tenemos ni puta idea XDDDDDD

Porque esto viene a demostrar que se puede programar en un lenguaje, sin conocer el lenguaje. Vaya tela... :D

por Juanjo, en 2005-09-23 10:45:43

Los comentarios están cerrados: los comentarios se cierran automáticamente una vez pasados 30 días. Si quieres comentar algo acerca de la anotación, puedes hacerlo por e-mail.

Algunas anotaciones relacionadas: