Curry de funciones en JavaScript

tome un recipiente, agregue un poco de agua, agregue algunas líneas de código, agregue algunas hojas de curry y masala (según su gusto), cocínelo a fuego lento durante 25 minutos y, aquí está la función curring, listo para servir en producción . Solo bromeo muchachos y gols.
Hola, desarrolladores de JS. Estoy de vuelta con un tema candente "Currido de funciones"
Esta historia cubre:
- qué es curry, cómo funciona y por qué se usa.
La historia comienza aquí
¿Qué es una función curry?
curry está transformando una función que toma múltiples argumentos [ejemplo: nombre de función (a, b, c)] en varias funciones que toman un solo argumento en una secuencia.
vale vale.., sé que suena con-fu-jing (confuso), también mis reacciones fueron las mismas cuando leí esto por primera vez.
ok, entendámoslo fácilmente, una función (doSum) que toma todos los argumentos de una sola vez, es decir, doSum (a, b, c) [ejemplo a continuación: función de suma normal.

Se transforma en varias funciones (addNumbers(a), (b), (c)) que toman un solo argumento a la vez en una secuencia.
Nota: La funcionalidad (propósito) de ambas funciones es la misma, solo se les cambió el nombre para una mejor comprensión.

esta es la función de curry según geeks for geeks :
Es una técnica en programación funcional, transformación de la función de múltiples argumentos en varias funciones de un solo argumento en secuencia.
en palabras simples, la función en lugar de tomar todos los argumentos a la vez, la función toma el primer argumento y devuelve la función que toma el otro argumento, y luego devuelve otra función que toma el tercer argumento, y así sucesivamente hasta que todos los argumentos son tomada (ejemplo en la imagen nombrada: función curry).
¿Cómo funciona el curry?
curring en javascript puede ser un poco difícil de entender, ya que es javascript
pero tratemos de ponernos al tanto, a continuación se muestra un ejemplo de una función simple

aquí la función "doSum" agrega el argumento dado y devuelve la suma de todos los argumentos pasados.
a continuación se muestra la versión curry de la misma función (recién renombrada, para una mejor comprensión)

la salida de la función anterior y la siguiente será la misma, 18
addNumbers es la versión curry de la función anterior doSum, addNumber, la función principal toma el argumento, es decir, 5 en nuestro caso, y devuelve otra función anónima que toma otro argumento, es decir, 6 en nuestro caso y el proceso continúa hasta que se pasan todos los parámetros, el la última función anónima devuelve el valor después de procesar todas las entradas.
implementamos funciones anidadas en el ejemplo anterior, por lo que cada una de las funciones toma un argumento y devuelve otra función hasta que no se completan todos los argumentos.
puede currar su función de 2 maneras diferentes, usando la función de enlace y usando los cierres, veamos cómo se ve
función de curry usando la función bind
si no sabe qué es la función de vinculación, consulte esta historia mía .

aquí, en el ejemplo anterior, estamos usando la función de enlace de javascript, y usando la función de enlace estamos ejecutando la función "onBoardUser".
basicCompanyDetails es similar para todos los usuarios incorporados, por lo que queremos que los detalles estén disponibles de forma predeterminada para todos los usuarios que están incorporados, aquí estamos pasando un argumento "basicCompanyDetails" a la función de vinculación y creando una instancia de "onBoardUser", aquí la función de enlace devuelve la función que puede almacenar en algún lugar de la memoria y ejecutarla más tarde, aquí estamos almacenando la función en addUser y la estamos invocando para todos los usuarios.
así es como puede currar su función usando la función de enlace en javascript. más ejemplos en la imagen de abajo.

también puede pasar ambos parámetros mientras llama al método addUserToSales, obtendrá los mismos resultados.
Curry de función usando cierres.
los cierres son un concepto muy común pero complicado en javascript, pero no se discute mucho, puede leer sobre qué son los cierres aquí .
intentemos implementar la función curry usando cierres.

en el ejemplo anterior, hemos creado una función "onBoardUser" que toma un argumento y devuelve otra función anónima que toma otro argumento, resume los detalles y regresa.
estamos llamando a la función "onBoardUser" con un argumento, es decir , accountDepartmentDetails y almacenándolo en una variable (recuerde que onBoardUser devuelve una función), así que almacenamos una función en una variable addUsertoAccounts y ahora la variable tiene una función que se puede invocar en cualquier momento con un argumento que está solicitando, por lo que invocamos la función anónima (devuelta por onBoardUser) almacenada en addUsertoAccounts con un argumento (detalles del usuario, es decir, detalles de John).
una vez que se invoca la función, ha completado la ejecución de la instrucción presente en su interior e impreso el resultado.

si las funciones también se invocaran después de unas 10k líneas de código, imprimiría el mismo resultado, ya que es un cierre, y recuerda el alcance léxico del mismo.
Actualizando con ES6:

así es como puede usar la función curring con cierres en JS.
aún así, es posible que tenga una pregunta en su cabeza: si podemos pasar múltiples argumentos a una función, ¿por qué necesitamos curry en absoluto?
esto probablemente responderá a esas dudas.
porque se usa
¿por qué? ¿por qué? ¿por qué?
- currying es una técnica que divide las funciones en funciones más pequeñas, cada función individual tiene su propio trabajo y eso hace que su función sea pura y menos propensa a errores y efectos secundarios.
- ejemplo: la primera función valida los datos del usuario, la segunda valida los datos de la empresa, etc.
- se usa en programación funcional para usar funciones de orden superior
- le ayuda a mantener su código limpio y organizado.
- Además, puede usar el curry como un mecanismo que lo ayuda a verificar que tiene todo antes de continuar.
- ejemplo: cada función anidada no se ejecutará si no obtiene los argumentos requeridos.