Composición de funciones
Componer es combinar funciones simples para formar una más compleja: la salida de una es la entrada de la siguiente.
const doble = (n) => n * 2;
const incrementar = (n) => n + 1;
const dobleYIncrementar = (n) => incrementar(doble(n));
console.log(dobleYIncrementar(5)); // 11
Una función componer genérica que aplica de derecha a izquierda:
const componer = (f, g) => (x) => f(g(x));
const resultado = componer(incrementar, doble);
console.log(resultado(5)); // 11
Currying
El currying transforma una función de varios argumentos en una secuencia de funciones de un solo argumento. Permite "fijar" parámetros y crear funciones especializadas:
const multiplicar = (a) => (b) => a * b;
const porTres = multiplicar(3); // fija a = 3
console.log(porTres(5)); // 15
console.log(multiplicar(2)(4)); // 8
Esto se apoya en los closures: la función interna "recuerda" el valor de
a aunque la externa ya haya terminado. El currying y la composición son la
base para construir tuberías de transformación reutilizables.
Ejemplos
Currying para crear funciones especializadas
const sumar = (a) => (b) => a + b;
const sumar10 = sumar(10);
console.log(sumar10(5)); // 15
console.log(sumar(2)(3)); // 5