En este momento estás viendo [PHP] Operador ternario

[PHP] Operador ternario

Cuando trabajamos con bastante código, es habitual encontrarnos con el operador ternario. Su principal ventaja es que permite expresar una condición sencilla de una forma compacta, normalmente en una sola línea.

Ahora bien, que algo pueda escribirse en una sola línea no significa necesariamente que debamos hacerlo siempre así.

Personalmente, prefiero utilizar el operador ternario cuando la condición es realmente sencilla. Cuando empieza a complicarse, un if/else tradicional suele resultar mucho más fácil de leer y mantener.


¿Qué es el operador ternario?

El operador ternario es una forma abreviada de expresar una condición if/else.

Su sintaxis básica es:

$resultado = $condicion ? $valorSiVerdadero : $valorSiFalso;

Es decir:

condición ? si : no

Primero se evalúa la condición. Si es verdadera, se utiliza el valor situado después del signo ?. Si es falsa, se utiliza el valor situado después de :.

Un ejemplo sencillo

$puedeQue = true;

$amoaphp = $puedeQue ? "true" : "false";

echo $amoaphp;

En este caso, como $puedeQue contiene true, la variable $amoaphp recibirá el valor "true".


La alternativa con if/else

El mismo código podría escribirse utilizando una estructura condicional tradicional:

$puedeQue = true;

if ($puedeQue) {
    $amoaphp = "true";
} else {
    $amoaphp = "false";
}

echo $amoaphp;

El resultado es exactamente el mismo.

La diferencia está principalmente en la forma de expresar la lógica. El operador ternario resulta más compacto, mientras que el if/else puede resultar más claro cuando la condición empieza a crecer.


¿Cuándo utilizarlo?

El operador ternario funciona especialmente bien cuando tenemos una condición sencilla y necesitamos obtener uno de dos valores.

Por ejemplo:

$edad = 20;

$mensaje = ($edad >= 18) ? "Mayor de edad" : "Menor de edad";

echo $mensaje;

Es bastante fácil de leer: si la edad es igual o superior a 18, utilizamos el primer valor; en caso contrario, utilizamos el segundo.

En cambio, si empezamos a introducir condiciones complejas, llamadas a funciones o varias operaciones dentro de la misma expresión, probablemente sea mejor utilizar un if/else.


Un detalle importante con isset()

Y aquí viene una pequeña trampa que puede resultar interesante cuando empezamos a trabajar con PHP.

Supongamos que tenemos una variable definida:

$puedeQue = false;

Podríamos pensar que utilizar isset() sobre ella nos indicará que su valor es false. Pero no es eso lo que hace esta función.

$puedeQue = false;

$amoaphp = isset($puedeQue) ? "true" : "false";

echo $amoaphp;

El resultado será:

true

¿Por qué?

Porque isset() no comprueba si el valor de una variable es verdadero o falso. Comprueba si la variable existe y, además, su valor no es null.

En nuestro ejemplo:

$puedeQue = false;

La variable existe y su valor no es null. Por tanto:

isset($puedeQue); // true

Que el valor de la variable sea false no cambia el resultado de isset().


isset() no es lo mismo que comprobar un valor

Esta diferencia es importante porque son comprobaciones distintas.

Si queremos comprobar si una variable contiene exactamente false, podemos hacerlo directamente:

$puedeQue = false;

if ($puedeQue === false) {
    echo "El valor es false";
}

También podemos utilizar el operador ternario:

$puedeQue = false;

$amoaphp = ($puedeQue === false) ? "false" : "true";

echo $amoaphp;

Ahora sí estamos preguntando por el valor de la variable y no por su existencia.


¿Y si la variable no existe?

Aquí es precisamente donde isset() resulta útil.


if (isset($usuario)) {
    echo "La variable existe";
} else {
    echo "La variable no existe";
}

Si $usuario no está definida, isset() devolverá false sin generar un aviso por acceder a una variable inexistente.

También podemos combinarlo con el operador ternario:

$mensaje = isset($usuario)
    ? "Usuario definido"
    : "Usuario no definido";

echo $mensaje;

Este es un caso bastante habitual en PHP cuando trabajamos con variables que pueden o no estar disponibles.


Una cuestión de legibilidad

El operador ternario es una herramienta muy útil, pero conviene no convertirlo en una competición para ver cuánta lógica somos capaces de meter en una sola línea.

Por ejemplo, esto puede funcionar:

$resultado = $usuario && $usuario->activo ? "Activo" : "Inactivo";

Pero si empezamos a encadenar condiciones, llamadas a funciones y otros operadores, la legibilidad puede caer rápidamente.

En esos casos, probablemente sea mejor escribirlo de forma explícita:

if ($usuario && $usuario->activo) {
    $resultado = "Activo";
} else {
    $resultado = "Inactivo";
}

No siempre necesitamos menos líneas. Necesitamos que el código sea fácil de entender y mantener.


Conclusión

El operador ternario nos permite simplificar determinadas condiciones en PHP utilizando una sintaxis compacta:

$resultado = $condicion ? $valorSiVerdadero : $valorSiFalso;

Es especialmente útil cuando tenemos una condición sencilla y dos posibles resultados.

Eso sí, conviene utilizarlo con criterio. Si la expresión empieza a resultar difícil de leer, un if/else tradicional será probablemente una opción mejor.

Y, sobre todo, hay que tener clara la diferencia entre comprobar una condición y comprobar si una variable existe. isset() nos dice si una variable está definida y no es null; no nos dice si su valor es verdadero.

Una distinción pequeña, pero bastante importante cuando empezamos a trabajar con PHP.

Visitas: 900

Website |  + posts

Automation & Data Specialist | Web Development | Data Processing & Integration

Serna Studio

Automation & Data Specialist | Web Development | Data Processing & Integration

Deja una respuesta