Currificación de funciones
Transforme funciones con varios argumentos en cadenas de llamadas.
Currificación de funciones es una lección gratuita de JavaScript Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de JavaScript Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de JavaScript Academy incluye 4 lecciones en total.
¿Qué es la currificación?
La currificación transforma una función que recibe muchos argumentos en una secuencia de funciones que reciben un argumento cada una.
En lugar de add(1, 2, 3), se llama a add(1)(2)(3). Cada llamada devuelve la función siguiente hasta recopilar todos los argumentos.
Currificación manual
La forma más clara de ver la currificación es escribir funciones anidadas, cada una de las cuales devuelve la siguiente y forma una clausura sobre los argumentos anteriores.
function add(a) {
return function (b) {
return function (c) {
return a + b + c;
};
};
}
console.log(add(1)(2)(3));Devoluciones de flecha anidadas
Las funciones flecha hacen más breves las definiciones currificadas. Cada => devuelve la siguiente flecha y la última realiza el trabajo.
const add = a => b => c => a + b + c;
console.log(add(1)(2)(3));
console.log(add(10)(20)(30));Las clausuras recuerdan los argumentos
La currificación depende de las clausuras. Cada función devuelta mantiene una referencia a las variables de su ámbito externo, por lo que los argumentos anteriores siguen disponibles hasta que se ejecuta la última llamada.
const greet = greeting => name => greeting + ', ' + name + '!';
const sayHi = greet('Hi');
console.log(sayHi('Ada'));
console.log(sayHi('Grace'));Llamar paso a paso
No tiene que aplicar todos los argumentos a la vez. Puede detenerse a mitad del proceso y conservar el resultado parcial en una variable para reutilizarlo.
const add = a => b => c => a + b + c;
const addOne = add(1);
const addOneAndTwo = addOne(2);
console.log(addOneAndTwo(3));
console.log(addOneAndTwo(100));Una función auxiliar curry genérica
Escribir funciones anidadas manualmente resulta tedioso. Una función auxiliar curry genérica recopila argumentos hasta tener suficientes y después llama a la función original.
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn(...args);
}
return (...more) => curried(...args, ...more);
};
}
const add = curry((a, b, c) => a + b + c);
console.log(add(1)(2)(3));Llamadas flexibles con curry
Una buena función auxiliar curry acepta argumentos agrupados de cualquier manera. fn.length indica cuántos parámetros declaró la función original.
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn(...args);
}
return (...more) => curried(...args, ...more);
};
}
const add = curry((a, b, c) => a + b + c);
console.log(add(1, 2, 3));
console.log(add(1, 2)(3));
console.log(add(1)(2, 3));Currificación para la especialización
La currificación facilita la especialización: aplique el primer argumento y reutilice la función devuelta en muchas llamadas.
const multiply = a => b => a * b;
const double = multiply(2);
const triple = multiply(3);
console.log(double(5));
console.log(triple(5));Currificación con métodos de arrays
Las funciones currificadas encajan perfectamente con map y filter, porque cada una produce una función de un argumento lista para recibir cada elemento.
const greaterThan = min => value => value > min;
const over10 = greaterThan(10);
console.log([5, 12, 8, 20].filter(over10));Currificación frente a aplicación parcial
La aplicación parcial fija algunos argumentos y deja el resto para una única llamada posterior. La currificación siempre divide una función en una cadena de llamadas de un solo argumento.
La currificación es una forma específica y completamente descompuesta de aplicación parcial.
const partial = (a, b) => c => a + b + c;
const curried = a => b => c => a + b + c;
console.log(partial(1, 2)(3));
console.log(curried(1)(2)(3));¿Por qué currificar?
La currificación fomenta funciones pequeñas, componibles y reutilizables. Se combina de forma natural con la composición de funciones, que explorará a continuación. La idea clave es que una función currificada nunca está «incompleta»: simplemente devuelve otra función hasta recibir todos los argumentos.
const tag = name => content => '<' + name + '>' + content + '</' + name + '>';
const bold = tag('b');
console.log(bold('important'));
console.log(tag('i')('slanted'));Comprobación rápida
Dado const add = a => b => c => a + b + c;, ¿a qué se evalúa add(1)(2)?
Repaso: currificación
Ha aprendido a descomponer funciones en cadenas de un solo argumento:
- Las funciones currificadas devuelven una función nueva por cada argumento mediante cierres.
- Las funciones flecha anidadas permiten definiciones currificadas compactas.
- Una función auxiliar genérica
curryusafn.lengthpara saber cuándo se han recibido suficientes argumentos. - La currificación permite una especialización y una composición limpias.
Preguntas frecuentes
¿La lección «Currificación de funciones» es gratis?
Sí — el texto completo de «Currificación de funciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de JavaScript Academy, actualiza a CoddyKit PRO. El curso de JavaScript Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Currificación de funciones»?
Transforme funciones con varios argumentos en cadenas de llamadas. Practicas JavaScript Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar JavaScript Academy?
No se requiere experiencia previa. JavaScript Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Currificación de funciones»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de JavaScript Academy?
Sí. Cada lección de JavaScript Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Aplicación parcial
- Currificación de funciones
- Composición de funciones
- Construcción de pipe y compose