DEV Community

Cover image for Función al curry
Franco Cuarterolo
Franco Cuarterolo

Posted on

5 3

Función al curry

Sí, ya sé, cuando te nombraron lo que llamamos Curry function
(o funciones currificadas) te hizo ruido el estómago. Pero lamentablemente, nada tienen que ver con ese condimento. ¿Y por qué lleva el mismo nombre? Por Haskell Curry, matemático estadounidense. Según Wikipedia fue propuesto el nombre Schönfinkelisation pero no creo que tenga tanto marketing.

¿Qué significa que una función sea currificada?

Una función currificada es aquella que está compuesta por dos o más funciones, ejecutadas de forma secuencial. Estas funciones comparten los mismos argumentos ya que componen un mismo closure.

¿Cómo se ve una función curry?

//Función cotidiana
const suma = (valor1, valor2) => {
    return(valor1 + valor2);
};
suma(1, 2); // 3

//Función Curry
const sumaCurry = (valor1) => {
    return (valor2) => {
        return(valor1 + valor2);
    };
};
sumaCurry(4)(2); // 6
Enter fullscreen mode Exit fullscreen mode

¿Qué notamos de diferente?

En el snippet de código, podemos ver que la función curry recibe un parámetro (valor1), luego retorna una función que recibe el segundo parámetro (valor2) y esa función retorna la suma de ambos parámetros. Son dos funciones que comparten un mismo scope
y los mismos parámetros.

En el momento de ejecución de la función, tenemos que ejecutarla dos veces: una vez por cada función anidada hasta llegar al resultado. Esto nos permite desacoplar partes de la función y guardarlas en variables

¿En qué nos beneficia?

Una característica que a mí me encanta de las funciones curry es que nos permiten reutilizar funciones por partes. Por ejemplo, digamos que nuestra función sumaCurry siempre la usamos para sumar de a 20. Podemos ejecutar la primera parte de la función, y guardar la segunda para más tarde

const sumaVeinte = sumaCurry(20)

const sumaVeinte(10) // 30
Enter fullscreen mode Exit fullscreen mode

Si nos fijamos en la consola con console .log qué tiene dentro sumaVeinte`, nos mostrará esto:

Cuerpo de función sumaVeinte

Pero si utilizamos el método console .dir y nos dirigimos a donde dice [[[Scopes ]]] podremos ver dentro del closure nuestro valor 20 guardado.

Información del Closure de la función sumaVeinte

Conclusión

La idea de este articulo era mostrarte la existencia de este tipo de funciones y puedas reconocerlas. Tienen muchos usos y se encuentran en muchos lenguajes de programación funcional. Te invito a que explores el concepto y lo pongas en práctica!

SurveyJS custom survey software

JavaScript UI Libraries for Surveys and Forms

SurveyJS lets you build a JSON-based form management system that integrates with any backend, giving you full control over your data and no user limits. Includes support for custom question types, skip logic, integrated CCS editor, PDF export, real-time analytics & more.

Learn more

Top comments (2)

Collapse
 
jonrandy profile image
Jon Randy 🎖️

A nicer way to write the curried function:

const sumaCurry = valor1 => valor2 => valor1 + valor2;

sumaCurry(4)(2); // 6
Enter fullscreen mode Exit fullscreen mode
Collapse
 
sebawetzel profile image
Sebastian Wetzel

Al fin alguien que explica en español y bien claro cual es el propósito y un uso práctico de del currying. Un millón de gracias!

SurveyJS custom survey software

JavaScript Form Builder UI Component

Generate dynamic JSON-driven forms directly in your JavaScript app (Angular, React, Vue.js, jQuery) with a fully customizable drag-and-drop form builder. Easily integrate with any backend system and retain full ownership over your data, with no user or form submission limits.

Learn more

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay