El curry aparte de una mezcla de especias que le da a las comidas un toque delicioso, es un método de programación funcional en el que se combinan funciones.
Me hace gracia el nombre y curiosamente es en honor a Haskell Curry, matemático cuyos trabajos se basaron en esta lógica combinatoria y que sembró las bases de la programación funcional. De ahí que existan en programación tanto haskell como curry o currificación y que ambos estén basados en programación funcional.
Pero qué hace exactamente la currificación…
Una función currificada es una función que toma varios parámetros de uno en uno. Es decir, que si tenemos 3 parámetros, la función currificada devolverá una función con un parámetro y ésta devolverá una segunda función con el siguiente parámetro y ésta devolverá otra función con el último parámetro.
Dicho así parece un trabalenguas, así que vamos a ver un ejemplo:
Tenemos una función que muestra por consola un saludo y un nombre que vienen determinados por los parámetros
Ahora vamos a definir una función currificada:
Y dirás: “¿pa qué?”…
Bueno, a veces es útil cuando no tenemos en ese momento todos los parámetros, de modo que podemos llamar a la función con sólo un parámetro y ésta devolverá una función que espera a los restantes parámetros y ya cuando acabe retornará el resultado
En nuestro ejemplo:
Como la función currificada devuelve una función, hay que asignarla a una variable, que se va a convertir en esa función retornada. Aquí estaríamos usando uno de los parámetros que necesita nuestra función de saludar.
Por último ejecutamos la función introduciendo el segundo de los parámetros necesarios, el nombre
Versión simplificada:
Voy a incluir el ejemplo que nos puso Daniel Ramos en el que se usaba esto mismo pero con promesas, y que nos permite ver claramente el potencial que tiene esta forma de programar.
Aquí es importante llamar la atención sobre un aspecto a tener en cuenta en la currificación y es que el orden de los factores (o argumentos en este caso) altera el producto (o resultado en este caso). Es decir, que tal y como orquestemos el proceso de currificación, éste tendrá más facilidad para acceder a los datos necesarios o lo contrario.
En este sentido, se recomienda que los primeros argumentos (o parámetros) sean aquello que se quiere sacar (en nuestro ejemplo, el saludo) y que se deje para el final aquel argumento que tiene los datos en los cuales se va a operar, por si éstos faltaran. Como se puede ver en el ejemplo, éstos datos últimos vendrían de una petición y usamos la promesa para aplicar nuestra función currificadora y así asegurarnos de que se ejecute cuando tenga el último parámetro disponible.