DevPath · Aprenda a programar ESPTEN

Programação funcional

Composição e currying

Composição de funções

Compor é combinar funções simples para formar uma mais complexa: a saída de uma é a entrada da seguinte.

const dobro = (n) => n * 2;
const incrementar = (n) => n + 1;

const dobroEIncrementar = (n) => incrementar(dobro(n));
console.log(dobroEIncrementar(5)); // 11

Uma função compor genérica que aplica da direita para a esquerda:

const compor = (f, g) => (x) => f(g(x));
const resultado = compor(incrementar, dobro);
console.log(resultado(5)); // 11

Currying

O currying transforma uma função de vários argumentos em uma sequência de funções de um único argumento. Permite "fixar" parâmetros e criar funções especializadas:

const multiplicar = (a) => (b) => a * b;

const porTres = multiplicar(3); // fixa a = 3
console.log(porTres(5)); // 15
console.log(multiplicar(2)(4)); // 8

Isso se apoia nos closures: a função interna "lembra" o valor de a mesmo depois de a externa ter terminado. O currying e a composição são a base para construir pipelines de transformação reutilizáveis.

Exemplos

Currying para criar funções especializadas

const somar = (a) => (b) => a + b;
const somar10 = somar(10);
console.log(somar10(5));  // 15
console.log(somar(2)(3)); // 5
Coloque isto em prática

O DevPath é um curso prático: aqui você lê a teoria; no app você a coloca em prática com exercícios que rodam de verdade, offline.

Comece grátis no app →
← Funções de ordem superior e map/filter/reduceCópia rasa vs profunda (shallow vs deep) →