O que é currying?
4 de setembro de 2025 · 3 min de leitura
Currying é uma técnica para criar funções que compartilham uma mesma lógica. Nela, funções são aninhadas dentro de outras, cada uma sendo responsável por um parâmetro da lógica total.
Exemplo em JavaScript:
// função curryficada
function multiplicarESomar(a) {
return function(b) {
return function(x) {
return a*x + b;
}
}
}
const f = multiplicarESomar(2)(1);
// f(x) = 2x + 1
console.log(f(4)); // 9
const g = multiplicarESomar(3);
// g(x) = 3x + b
// b não especificado ainda
console.log(g(2)(1)); // 5, b = 2
Com currying, subfunções podem aplicar argumentos fixos a uma função-mãe e herdar a declaração dos parâmetros restantes.
Uma forma de imaginar funções curryficadas é como se fossem bonecas russas (matryoshkas): uma dentro de outra, dentro de outra.

Essa técnica vem da programação funcional e é muito útil para cálculos e matemática.
Outro exemplo, em F#:
let volumePiramide(formulaAreaBase)(c)(l)(a) =
a * (formulaAreaBase(c)(l))/3.0
let areaRetangulo(c)(l) = c * l
let areaTriangulo(c)(l) = (c * l)/2.0
let areaCirculo(_)(r) = Math.PI * r**2.0
let volumePiramideBaseRetangular =
volumePiramide(areaRetangulo)
let volumePiramideBaseTriangular =
volumePiramide(areaTriangulo)
let volumeCone =
volumePiramide(areaCirculo)(0)
// usos
let v1 = volumePiramideBaseRetangular(7.0)(4.0)(11.0)
let vc = volumeCone(9.0)(12.0) // raio 9, altura 12
Quanto menos um parâmetro varia entre as subfunções, mais à esquerda ele deve ficar na declaração curryficada.
A
AlexandreHTRBCampinas/SP,
Brasil