O que é currying?

4 de setembro de 2025 · 3 min de leitura

Read in english

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.

Bonecas russas matryoshkas

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

AlexandreHTRB

Campinas/SP,
Brasil