Operadores de fusión en PHP
CategoriasPHPProgramación

Null coalescing y el operador de asignación de fusión nula

Usando null coalescing (??) y el operador de asignación de fusión nula (??=) para escribir código más limpio

Una vez más, siguiendo un poco con el objetivo de mejorar como programadores y hacer el código más limpio y fácil de mantener, vamos a ver dos características “nuevas” que tiene PHP frente a versiones más viejas.

Vamos a ver el operador de fusión nula (??) y el operador de asignación de fusión nula (??=) introducidos en PHP 7 y PHP 7.4 respectivamente.

Si, ha que te has quedado… WTF?!

Probablemente también que al escuchar “operador de fusión” te ha venido a la cabeza Homer Simpson en la central nuclear o en su defecto un operario en una central nuclear ¿no?

Es que… vaya nombrecitos estos de PHP 🤭

Bueno va perdona, vayamos al tema que nos ocupa 😉

El objetivo de estos operadores de fusión 🙄 (que es azúcar sintáctico al fin y al cabo) es permitirnos una vez más escribir código más legible, limpio y fácil de mantener a la hora de trabajar con valores opcionales o variables que podrían no estar definidas.

En este artículo veremos cómo estos operadores simplifican expresiones comunes que antes requerían condicionales o ternarios más extensos.

Operador null coalescing (??)

Antes de PHP 7, la forma típica de asignar un valor con comprobación era la siguiente:

$username = isset($_GET['user']) ? $_GET['user'] : 'invitado';

Este código comprueba si $_GET['user'] está definido. Si no lo está, usa ‘invitado’ como valor por defecto.
Aunque funcional, no es la forma más elegante ni legible, por tanto, su versión moderna es:

$username = $_GET['user'] ?? 'invitado';

El funcionamiento es simple; si $_GET['user'] no está definido o es null, PHP tomará ‘invitado’ como valor.
Este enfoque no solo ahorra líneas de código, sino que también evita errores de tipo “undefined index”, haciendo el código más robusto.

Operador de asignación de fusión nula ??=

Antes de nada, imagina que estás trabajando con una versión de PHP vieja y quieres asignar un valor por defecto a una variable en caso de que no tenga valor o sea null.

Por ejemplo, tenemos una app web de varios idiomas y queremos hacer algo así:

if (!isset($config['lang']) || $config['lang'] === null) {
    $config['lang'] = 'es';
}

Pues bien, todo eso, desde PHP 7.4, lo podemos resumir mediante el operador ??=, quedando el código anterior de esta otra manera:

$config['lang'] ??= 'es';

Como ves, nos permite hacer lo mismo que antes, es decir, asignar un valor por defecto si la variable no tiene valor o es null.

Este operador es ideal para establecer valores iniciales o configuraciones predeterminadas sin necesidad de repetir código condicional.

Conclusión

Los operadores ?? y ??= son azúcar sintáctico que nos sirve para escribir código más limpio, legible y moderno en PHP, pero ¡ojo! Recuerda que no es oro todo lo que reluce y que el azúcar sintáctico puede tener también sus desventajas. ¿Has leído este post?

Lo que quiero decir es que el operador ?? es más conciso, sí, pero no necesariamente más legible, al menos no para todos los desarrolladores. Especialmente para quienes están empezando.

Permíteme dos ejemplos y termino 😅 (si, ya sé que te ha quedado claro, pero déjame, me gusta charlar, bueno, en este caso escribir).

Con isset() y ternario:

$username = isset($_GET['user']) ? $_GET['user'] : 'invitado';

En el anterior código se ve explícitamente que estamos comprobando si la clave ‘user’ está definida.
Esa claridad semántica ayuda a quien lee el código a entender qué se está evaluando: en este caso, la existencia de un índice.

Con el operador ??:

$username = $_GET['user'] ?? 'invitado';

Si, hace exactamente lo mismo, comprobar si $_GET['user'] está definido y no es null, sin embargo, lo oculta de alguna manera tras un operador… más compacto.
Para alguien experto o familiarizado con PHP moderno, es más limpio; pero para quien no lo conoce, puede resultar menos explícito o incluso ambiguo la primera vez 🤯

En definitiva y ahora si que termino, aunque con estos operadores reducimos código y evitamos errores, no siempre mejoran la legibilidad como nos suelen vender, al menos no para todos los desarrolladores.

Venga ahora sí, hasta luego, espero te haya gustado 😂

Sobre el autor

Comparte:

Este artículo está publicado bajo una licencia Creative Commons Atribución-CompartirIgual 4.0 Internacional . Puedes compartirlo y adaptarlo, incluso con fines comerciales, siempre que cites al autor y mantengas esta misma licencia.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Información básica sobre protección de datos
Responsable Óscar Martínez +info...
Finalidad Gestionar y moderar los comentarios +info...
Legitimación Consentimiento del interesado. +info...
Destinatarios No se cederán datos a terceros, salvo obligación legal +info...
Derechos Acceder, rectificar y cancelar los datos, así como otros derechos. +info...
Información adicional Puedes consultar la información adicional y detallada sobre protección de datos en nuestra página de política de privacidad.

Este sitio esta protegido por reCAPTCHA y laPolítica de privacidady losTérminos del servicio de Googlese aplican.

El periodo de verificación de reCAPTCHA ha caducado. Por favor, recarga la página.