La programación funcional se centra en la composición de funciones para resolver problemas de manera clara y concisa. Uno de los operadores más representativos de este paradigma es el operador pipe |>, que permite encadenar llamadas a funciones de forma fluida y natural.
El operador |> (pipe) se utiliza para pasar el resultado de una expresión como el primer argumento de la siguiente función en la cadena.
value |> function1() |> function2()
Esto es equivalente a:
function2(function1(value))
Como ventajas podemos nombrar:
- Legibilidad Mejorada: El flujo de datos se representa de forma secuencial, como si leyeras un proceso paso a paso.
- Eliminación de Paréntesis Anidados: Reduce la complejidad visual de funciones anidadas.
- Facilita el Refactoring: Reordenar o agregar pasos en el flujo es más sencillo.
Esto :
String.upcase(String.trim(" hola "))
Se puede escribir así:
" hola "
|> String.trim()
|> String.upcase()
Ambos códigos producen el mismo resultado: `"HOLA"`, pero la versión con |> es más legible.
El operador |> no se limita a funciones de la librería estándar; también puedes usarlo con tus propias funciones.
defmodule Math do
def square(x), do: x * x
def double(x), do: x * 2
end
5
|> Math.square()
|> Math.double()
Resultado: 50
Veamos ejemplos de uso :
[1, 2, 3, 4]
|> Enum.map(&(&1 * 2))
|> Enum.filter(&(&1 > 4))
Resultado: [6, 8]
Otro ejemplo con estructuras más complejas:
%{name: "John", age: 30}
|> Map.put(:country, "USA")
|> Map.update!(:age, &(&1 + 1))
Resultado: %{name: "John", age: 31, country: "USA"}
El operador `|>` es una herramienta fundamental en Elixir que no solo mejora la legibilidad del código, sino que también alienta un diseño funcional y modular. Al adoptarlo, puedes construir pipelines claros y efectivos que hagan que tu código sea más expresivo y fácil de mantener.