arrow_back Volver
Inicio keyboard_arrow_right Artículos keyboard_arrow_right Artículo

Laravel higher order messages

Luis Fernando Garcia Perez

Desarrollador de software.

av_timer 2 Min. de lectura

remove_red_eye 979 visitas

calendar_today 19 Junio 2024

Uno de los retos en el desarrollo de software es mantener nuestro código legible y fácil de leer, muchas veces la complejidad y la cantidad de funciones pueden hacer que esto sea difícil de lograr.

A medida que nuestro proyecto crece, también lo hace la necesidad de mantener un código limpio y organizado, lo cual puede convertirse en una tarea complicada. Es por eso que hoy me gustaría hablar sobre los Higher Order Messages en Laravel.

¿Qué son los Higher Order Messages?

Los Higher Order Messages son una característica de las colecciones Laravel que son súper útiles para escribir código más limpio y fácil de entender. En lugar de usar bucles o llamar métodos uno dentro del otro, los Higher Order Messages nos dejan aplicar métodos directamente a los elementos de una colección de manera sencilla y legible.

Aquí un ejemplo. Supongamos que tenemos la siguiente colección:

$users = collect([
    [
        'name' => 'Luis',
        'is_admin' => true,
        'age' => 27
    ],
    [
        'name' => 'Fernando',
        'is_admin' => false,
        'age' => 37
    ],
    [
        'name' => 'Juan',
        'is_admin' => false,
        'age' => 12
    ],
]);

Y se nos pide filtrar aquellos usuarios que sean administradores. Para ello, podrías hacer uso del método filter:

$users = $users->filter(function($user) {
    return $user['is_admin'];
});

En este caso, el método filter nos devolverá al usuario Luis, ya que es el único administrador en la colección.

Aunque esto funciona y obtenemos el resultado esperado, puede que en cierto punto tengas mucho código que no aporta claridad.

Utilizando los Higher Order Messages podemos mejorar muchísimo el código:

$users = $users->filter->is_admin;

Lo que aquí está sucediendo es que estamos llamando al método filter, sin la necesidad de pasar un callback al método, Laravel se encarga de hacer el loop de nuestra colección y obtener al atributo is_admin de cada elemento.

Bastante limpio y entendible, ¿verdad?

Aquí otro ejemplo práctico pero con Eloquent.

Supongamos ahora que tenemos una colección de usuarios y queremos obtener una lista de correos, pero solo aquellos que han sido verificados.

Algo que podríamos hacer es:

$verifiedEmails = User::all()->filter(function ($user) {
    return $user->hasVerifiedEmail();
})->map(function ($user) {
    return $user->email;
});

Con los Higher Order Messages, esto se reduce a:

$verifiedEmails = User::all()->filter->hasVerifiedEmail()->pluck('email');

En este caso, Laravel recorre todos los usuarios y ejecuta el método hasVerifiedEmail para cada uno de ellos, devolviéndonos una colección de usuarios con email verificado. Luego, concatenamos el método pluck de las colecciones para extraer el atributo email de los usuarios.

¿Ves la diferencia? Es mucho más limpio y fácil de leer.

¿Cómo Funcionan?

Los Higher Order Messages funcionan mediante el uso de “proxy objects” que interceptan las llamadas a métodos y las aplican en cada elemento de la colección. Esto significa que puedes llamar a métodos directamente sobre la colección sin necesidad de escribir funciones que reciben un callback, tal como vimos en los ejemplos anteriores.

Desventajas

Aunque los Higher Order Messages son extremadamente útiles, es importante tener en cuenta que no todos los métodos disponibles en las colecciones se pueden usar de esta forma.

Solo tenemos acceso a 24 métodos. Sin embargo, estos métodos cubren muchas de las tareas repetitivas que hacemos en el día a día.

Aquí un link con todos los métodos

https://laravel.com/docs/11.x/colecciones#higher-order-messages

Conclusión

Los Higher Order Messages son una herramienta poderosa que cualquier desarrollador de Laravel debería conocer. Nos permiten mantener nuestro código limpio, legible y trabajar de manera más eficiente. La próxima vez que estés trabajando con colecciones, recuerda que los Higher Order Messages pueden ser un gran aliado para simplificar y mejorar tu código.

¿Qué te parece esta característica de Laravel? ¿Ya la conocías?

Aprende más de Laravel con el Bootcamp de PHP y Laravel