Las funciones anónimas en Elixir son una herramienta fundamental para trabajar de forma funcional y compacta. A diferencia de las funciones tradicionales, estas no tienen nombre ni módulo al que pertenezcan, sino que existen como valores que podemos asignar a variables y manipular como cualquier otro dato. Esto las convierte en elementos de primera clase, lo que significa que podemos pasarlas como parámetros, almacenarlas y devolverlas desde otras funciones sin problema.
Para crear una función anónima en Elixir utilizamos la palabra clave fn. A continuación, definimos los argumentos que recibirá la función, separados por comas y sin necesidad de paréntesis. Después, colocamos una flecha -> que indica el inicio del cuerpo de la función, donde escribimos la expresión que queremos evaluar. Finalmente, cerramos la definición con end. Por ejemplo, si queremos una función que eleve al cuadrado un número, la escribiríamos así:
fn n -> n * n end
Esta función toma un argumento n y devuelve su cuadrado. Aunque la sintaxis puede parecer un poco extraña al principio, es bastante clara una vez que nos acostumbramos: transformamos n en n * n.
Cuando definimos una función anónima, Elixir nos muestra algo como #Function<44.97>, que es una representación interna de la función. No nos muestra el resultado directamente porque lo que tenemos es un valor que representa la función, no su ejecución.
Para poder usar esta función, normalmente la asignamos a una variable. Por ejemplo, podemos guardar la función de elevar al cuadrado en la variable cuadrado:
cuadrado = fn n -> n * n end
Ahora, para llamar a esta función almacenada en la variable, no basta con escribir cuadrado(4), porque Elixir interpretaría que estamos llamando a una función global llamada cuadrado con un argumento, y no existe tal función. En su lugar, debemos usar la sintaxis con el punto para indicar que queremos llamar a la función almacenada en la variable:
cuadrado.(4)
Esto devolverá 16, que es el resultado de elevar 4 al cuadrado.
Podemos definir funciones anónimas con varios argumentos sin problema. Por ejemplo, una función que sume dos números:
suma = fn a, b -> a + b end
Y la llamamos con:
suma.(2, 3)
que nos devolverá 5.
Una de las grandes ventajas de las funciones anónimas es que podemos pasarlas como parámetros a otras funciones, lo que facilita la programación funcional y la reutilización de código. Por ejemplo, podemos definir un módulo llamado Calculon con una función operar que recibe otra función como argumento y la aplica a dos valores fijos, 5 y 3:
defmodule Calculon do
def operar(funcion) do
funcion.(5, 3)
end
end
Ahora, podemos llamar a Calculon.operar pasando una función anónima que sume sus dos argumentos:
Calculon.operar(fn a, b -> a + b end)
Esto devolverá 8, porque la función suma 5 y 3.
De igual forma, si definimos una función anónima para restar dos números y la asignamos a la variable restar:
restar = fn a, b -> a - b end
Podemos pasarla a Calculon.operar para obtener la diferencia:
Calculon.operar(restar)
que devolverá 2.
Así, las funciones anónimas nos permiten escribir código más flexible y expresivo, facilitando la composición y el paso de comportamiento como datos dentro de nuestros programas en Elixir.