Me costó encontrar un ejemplo de la vida real del uso de la función de curry y obtener el beneficio de usar curry.
Cuando busco en Google la función de curry, a menudo veo el ejemplo como
let add = x => y => x + y;
let add10 = add(10);
console.log(add10(20));
Tengo que decir que realmente no veo el valor de usar curry en este ejemplo.
Después de leer las respuestas en este SO /programming/113780/javascript-curry-what-are-the-practical-applications , todavía no veo el beneficio de usarlo.
Por ejemplo, la respuesta con la puntuación más alta da un ejemplo de convertidor, pero ese ejemplo puede reescribirse sin curry como muestra otra respuesta.
También leí las respuestas ¿Cuál es la ventaja de curry? (aunque la discusión no se limita a JavaScript) Todavía tengo la sensación de que la versión de curry se puede reescribir sin curry (en js).
Entonces, ¿alguien puede mostrarme la ventaja / beneficio "real" de usar curry en javascript?
---- actualización ----
Excepto por las respuestas que obtuve, también encuentro que el ejemplo de registro aquí muestra el beneficio de usarlo.
for
ciclo puede reescribirse como unwhile
ciclo. Cadaif
declaración puede reescribirse como unwhile
bucle. Cadawhile
bucle se puede reescribir como agoto
. Eso no significa que no sean útiles.Respuestas:
Casi nunca he usado Curry, pero aquí hay un ejemplo reciente donde demostró ser útil. Estaba codificando el juego Battlesnake , pero esto se aplicaría a muchos juegos. Le proporcionan varios arreglos, que le dan la ubicación de su serpiente, serpientes enemigas y comida. Supongamos que está considerando mudarse a un cierto punto {x, y}, y desea verificar si contiene otra serpiente, comida o incluso usted mismo. El primer paso sería escribir código como este (usaré una combinación de funciones y nuevas flechas)
y en algún lugar del código ir
No está mal, pero, dado que harás esto en muchos lugares en tu código, es un poco tedioso y torpe. Y, desde mi experiencia, es fácil confundir los dos argumentos. :-( El problema de fondo es que la
some()
(ofind()
) aceptar una función de tomar solamente un único argumento, y que realmente necesita dos argumentos , los dos puntos lo tanto, se piensa en currificación Aquí muchos podrían utilizar flechas, encuentro funciones anidadas más clara.!:Entonces, su prueba de "es ese alimento" se convierte
¿Esto te hará millonario en Internet? Probablemente no. Pero sí simplifica y, en este caso, aclara su código.
fuente
Curry en su ejemplo realmente no tiene sentido, estoy de acuerdo. Para ver la funcionalidad del curry, debe combinarlo con funciones de orden superior: funciones que toman otras funciones como parámetro.
El ejemplo más típico de esto es mapear, filtrar y reducir, aunque otra situación común son las devoluciones de llamada. Cuando aplica parcialmente una función, puede pasar la función parcialmente aplicada a estas funciones de orden superior. El curry tiene sentido cuando la mayoría de las veces que desee utilizar una función es para una aplicación parcial, de modo que pueda pasar a otra función de orden superior.
Un ejemplo más ilustrativo podría ser así:
El curry nunca es necesario, sí, ya que siempre puede crear una función anónima / flecha a partir de una función regular cuando los necesita, pero en algunas situaciones puede ser muy conveniente tener la función curry en comparación con la función regular (y en otras situaciones, es solo haciendo las cosas molestas y lentas).
fuente
{}
, no he encontrado que las clases de Builder sean muy útiles o comunes. ¿Puedes citar algunos ejemplos?Object.assign()
es bastante fácil ramificarse de una configuración base.