
Gabriel De Andrade
PreguntaCuales son las ventajas en el mundo real de usar Currying?

Jose Daniel Hernandez Quiceno
Se puede volver un tema complejo y veo que @davidherzlos nos regala un ejemplo para entenderlo mejor, sin embargo, este ejemplo tiene varios errores y creo que puede confundir un poco, así que, aquí está el mismo ejemplo funcionando correctamente con la definición de cada función usada.
const saludo = (mensaje) = (name) => `${mensaje} ${name}`; const saludarFeliz = saludo('Hola estimado'); saludarFeliz('Giddo van Rossum'); // Hola estimado Giddo van Rossum saludarFeliz('Rasmus Lerdorf')// Hola estimado Rasmus Lerdorf const saludarEnojado = saludo('Ashh!') saludarEnojado('Giddo van Rossum')// Ashh! Giddo van Rossum saludarEnojado('Rasmus Lerdorf')// Ashh! Rasmus Lerdorf const compose = (...fns) => (name) => fns.reduceRight((prop, f) => f(prop), name); const saludoBipolar = compose(saludarEnojado, saludarFeliz); saludoBipolar('Brendan Eich')// Ashh! Hola estimado Brendan Eich
Pequeños cambios que aclaran el buen ejemplo de @davidherzlos

Matias Niz
Lo mismo que @davidherzlos un claro ejemplo es la implementacion de middleware's en express.

David Antonio Ordóñez Cornejo
La ventaja que yo veo en usar currying es que puedes convertir funciones que reciben muchos parametros en funciones que reciben un solo parámetro, lo cual la vuelve apta para ser compuesta con otras funciones que de igual forma reciben un solo parámetro.
Al hacer currying, digamos, que podemos preconfigurar funciones y hacer código mucho mas modular.
const saludo = (mensaje) => (name) => name + mensaje const saludarFeliz = saludo('Hola estimado') saludarFeliz('Giddo van Rossum') // Hola estimado Giddo van Rossum saludarFeliz('Rasmus Lerdorf') // Hola estimado Rasmus Lerdorf saludarFeliz('Brendan Eich') // Hola estimado Brendan Eich const saludarEnojado = saludo('Ashh!') saludarEnojado('Giddo van Rossum') // Ashh! Giddo van Rossum saludarEnojado('Rasmus Lerdorf') // Ashh! Rasmus Lerdorf saludarEnojado('Brendan Eich') // Ashh! Brendan Eich const saludoBipolar = compose(saludarEnojado, saludarFeliz) saludoBipolar('Brendan Eich') // Ashh! Hola estimado Brendan Eich

David Antonio Ordóñez Cornejo
Excelente explicacion

Gabriel De Andrade
Gracias JJ! Gran aporte, a lo largo de la práctica he ido aplicando los conceptos y me he encontrado con ventajas claras sobretodo en closures, como cuando quieres pasar una función como parametro sin ejecutarla como con los
addEventListener
Segin vayas integrando este paradigma en tus aplicaciones vas a ir dandote cuenta de cuando necesitas utilizar todos estos elementos

Bryan Estiven Silva Mercado
tenía la misma duda gracias por el aporte

Julio J Yépez
Una de las ventajas es que si al momento de invocar una función que espera más de un parámetro, tienes solo uno de ellos, pues la función no generará un error, sino que retornará otra función que estará preparada para recibir el resto de parámetros que esperabas originalmente.
Es un poco complejo de explicar / entender, más aún en el contexto de JavaScript … pero en lenguajes “con alma de programación funcional” como Heskell, es sumamente útil y común encontrarle uso práctico a esta técnica.
En este artículo seguramente lo verás con mayor claridad.