0Pricing
JavaScript Academy · Aula

Funções curry

Transforme funções com vários argumentos em cadeias.

Funções curry é uma aula grátis de JavaScript Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de JavaScript Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de JavaScript Academy inclui 4 aulas no total.

O que é currificação?

Currificação transforma uma função que recebe muitos argumentos em uma sequência de funções que recebem um argumento cada.

Em vez de add(1, 2, 3), você chama add(1)(2)(3). Cada chamada retorna a próxima função até que todos os argumentos sejam coletados.

Currificação manual

A forma mais clara de entender a currificação é escrever funções aninhadas, cada uma retornando a próxima e formando um fechamento sobre os argumentos anteriores.

function add(a) {
  return function (b) {
    return function (c) {
      return a + b + c;
    };
  };
}

console.log(add(1)(2)(3));

Retornos de setas aninhados

As funções de seta tornam as definições currificadas mais curtas. Cada => retorna a próxima seta, e a última executa o trabalho.

const add = a => b => c => a + b + c;

console.log(add(1)(2)(3));
console.log(add(10)(20)(30));

Fechamentos lembram os argumentos

A currificação depende de fechamentos. Cada função retornada mantém uma referência às variáveis de seu escopo externo, portanto os argumentos anteriores continuam disponíveis até a execução da última chamada.

const greet = greeting => name => greeting + ', ' + name + '!';

const sayHi = greet('Hi');
console.log(sayHi('Ada'));
console.log(sayHi('Grace'));

Chamando passo a passo

Você não precisa fornecer todos os argumentos de uma só vez. Pode parar no meio e manter o resultado parcial em uma variável para reutilizá-lo.

const add = a => b => c => a + b + c;

const addOne = add(1);
const addOneAndTwo = addOne(2);

console.log(addOneAndTwo(3));
console.log(addOneAndTwo(100));

Um auxiliar genérico de currificação

Escrever funções aninhadas manualmente é trabalhoso. Um auxiliar genérico curry coleta argumentos até ter o suficiente e então chama a função 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));

Chamadas flexíveis com curry

Um bom auxiliar curry aceita argumentos em qualquer agrupamento. fn.length informa quantos parâmetros a função original declarou.

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));

Currificação para especialização

A currificação torna a especialização natural: aplique o primeiro argumento e reutilize a função retornada em muitas chamadas.

const multiply = a => b => a * b;

const double = multiply(2);
const triple = multiply(3);

console.log(double(5));
console.log(triple(5));

Currificação com métodos de vetores

Funções curried se encaixam perfeitamente em map e filter, pois cada uma produz uma função de um argumento pronta para receber cada elemento.

const greaterThan = min => value => value > min;

const over10 = greaterThan(10);
console.log([5, 12, 8, 20].filter(over10));

Currificação versus aplicação parcial

Aplicação parcial fixa alguns argumentos e deixa os demais para uma única chamada posterior. A currificação sempre divide uma função em uma cadeia de chamadas com um único argumento.

A currificação é uma forma específica e totalmente decomposta de aplicação 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 que usar curry?

A currificação incentiva funções pequenas, combináveis e reutilizáveis. Ela combina naturalmente com a composição de funções, que você explorará a seguir. A ideia principal é: uma função curried nunca está “incompleta”; ela simplesmente retorna outra função até receber argumentos suficientes.

const tag = name => content => '<' + name + '>' + content + '</' + name + '>';

const bold = tag('b');
console.log(bold('important'));
console.log(tag('i')('slanted'));

Verificação rápida

Dado const add = a => b => c => a + b + c;, qual é o resultado de add(1)(2)?

Recapitulação: currificação

Você aprendeu a decompor funções em cadeias de argumentos únicos:

  • Funções curried retornam uma nova função para cada argumento por meio de fechamentos.
  • Setas aninhadas permitem definições curried compactas.
  • Um auxiliar genérico curry usa fn.length para saber quando chegaram argumentos suficientes.
  • A currificação possibilita especialização e composição limpas.

Perguntas Frequentes

A aula “Funções curry” é grátis?

Sim — o texto completo de “Funções curry” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de JavaScript Academy, atualize para CoddyKit PRO. O curso de JavaScript Academy inclui 4 aulas no total.

O que vou aprender em “Funções curry”?

Transforme funções com vários argumentos em cadeias. Você pratica JavaScript Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar JavaScript Academy?

Nenhuma experiência prévia é necessária. JavaScript Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.

Quanto tempo leva a aula “Funções curry”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de JavaScript Academy?

Sim. Cada aula de JavaScript Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Aplicação parcial
  2. Funções curry
  3. Composição de funções
  4. Criando pipe e compose
← Voltar para JavaScript Academy