programação

Currying em JavaScript: Uma Introdução

Claro, vou explicar sobre a técnica de Currying em JavaScript.

Currying é uma técnica de transformação de uma função que espera múltiplos argumentos em uma sequência de funções que lidam com um único argumento. O nome “currying” é uma homenagem ao matemático Haskell Curry, que contribuiu significativamente para a teoria dos combinadores. Em JavaScript, essa técnica é frequentemente utilizada para criar funções parcialmente aplicadas.

A ideia por trás do currying é dividir uma função que espera múltiplos argumentos em uma série de funções que recebem apenas um argumento por vez e retornam uma nova função que espera o próximo argumento. Esse processo continua até que todos os argumentos tenham sido passados e a função original seja totalmente avaliada e possa ser executada.

Aqui está um exemplo simples de como o currying funciona em JavaScript:

javascript
function soma(a) { return function(b) { return a + b; }; } // Uso da função soma com currying const soma5 = soma(5); console.log(soma5(2)); // Saída: 7

Neste exemplo, a função soma recebe um argumento a e retorna uma nova função que recebe um argumento b. Quando essa nova função é chamada com o argumento b, ela retorna a soma de a e b. Portanto, podemos criar uma nova função soma5 que adiciona 5 a qualquer número passado para ela.

Uma vantagem do currying é a capacidade de criar funções mais especializadas a partir de funções mais genéricas. Isso pode tornar o código mais legível e reutilizável, além de facilitar o desenvolvimento e a manutenção do código.

Além disso, o currying também pode ser útil na aplicação parcial de argumentos. Isso significa que podemos passar apenas alguns dos argumentos para a função curried e obter uma nova função que espera os argumentos restantes. Isso pode ser útil em situações onde temos funções que esperam muitos argumentos, mas queremos reutilizá-las passando apenas alguns deles em diferentes contextos.

javascript
// Função genérica que multiplica três números function multiplica(a, b, c) { return a * b * c; } // Currying da função multiplica function curriedMultiplica(a) { return function(b) { return function(c) { return a * b * c; }; }; } // Aplicação parcial de argumentos const multiplicaPorDois = curriedMultiplica(2); const multiplicaPorDoisEQuatro = multiplicaPorDois(4); console.log(multiplicaPorDoisEQuatro(3)); // Saída: 24

Neste exemplo, a função multiplica é curried para que possamos aplicar argumentos parcialmente. Primeiro, criamos uma nova função multiplicaPorDois, que espera apenas dois argumentos, e então criamos outra função multiplicaPorDoisEQuatro, que espera apenas um argumento. Isso nos permite reutilizar a lógica da função multiplica de forma flexível em diferentes contextos.

Em resumo, o currying é uma técnica poderosa em JavaScript que nos permite criar funções mais especializadas a partir de funções mais genéricas, facilitando a reutilização e a composição de código. Ele nos permite dividir funções que esperam múltiplos argumentos em uma série de funções que lidam com um único argumento, o que pode melhorar a legibilidade e a manutenção do código.

“Mais Informações”

Claro, vamos explorar mais sobre a técnica de currying em JavaScript.

Em essência, currying é uma forma de transformação de funções que permite que uma função que espera múltiplos argumentos seja decomposta em uma série de funções que aceitam apenas um argumento por vez. Essas funções retornam outras funções que aguardam o próximo argumento, até que todos os argumentos tenham sido passados e a função original possa ser avaliada e executada.

A principal vantagem do currying é a capacidade de criar funções mais especializadas a partir de funções mais genéricas. Isso promove a reutilização de código e a composição de funções, tornando o código mais legível e modular.

Vamos explorar mais alguns exemplos para entender melhor como o currying funciona e como ele pode ser aplicado em situações do mundo real.

Exemplo com múltiplos argumentos:

javascript
function soma(a, b, c) { return a + b + c; } // Currying manual function curriedSoma(a) { return function(b) { return function(c) { return a + b + c; }; }; } // Uso da função curriedSoma const soma2 = curriedSoma(2); const soma2e3 = soma2(3); console.log(soma2e3(4)); // Saída: 9

Neste exemplo, a função soma é transformada em uma função curried curriedSoma. Cada invocação da função curried retorna uma nova função que aguarda o próximo argumento. Isso nos permite fornecer os argumentos um por um, resultando na mesma saída que a função original.

Aplicação parcial de argumentos:

Uma das vantagens do currying é a capacidade de aplicar parcialmente os argumentos de uma função, criando assim novas funções que esperam os argumentos restantes.

javascript
function multiplica(a, b, c) { return a * b * c; } // Currying manual para aplicação parcial function curriedMultiplica(a) { return function(b) { return function(c) { return a * b * c; }; }; } // Aplicação parcial de argumentos const multiplicaPorDois = curriedMultiplica(2); const multiplicaPorDoisEQuatro = multiplicaPorDois(4); console.log(multiplicaPorDoisEQuatro(3)); // Saída: 24

Neste exemplo, a função multiplica é curried para que possamos aplicar parcialmente os argumentos. Primeiro, criamos uma nova função multiplicaPorDois, que espera apenas dois argumentos. Em seguida, utilizamos essa função para criar outra função multiplicaPorDoisEQuatro, que espera apenas um argumento. Isso nos permite reutilizar a lógica da função multiplica de forma flexível em diferentes contextos.

Uso de funções de ordem superior:

O currying também é frequentemente usado em conjunto com funções de ordem superior, como map, filter e reduce, para criar funções mais concisas e expressivas.

javascript
const numeros = [1, 2, 3, 4, 5]; // Utilizando currying com a função map const duplica = x => x * 2; const numerosDuplicados = numeros.map(duplica); console.log(numerosDuplicados); // Saída: [2, 4, 6, 8, 10]

Neste exemplo, a função duplica é passada como argumento para a função map, que a aplica a cada elemento do array numeros, resultando em um novo array com os elementos duplicados.

Em resumo, o currying é uma técnica poderosa em JavaScript que nos permite criar funções mais especializadas a partir de funções mais genéricas, promovendo a reutilização de código e a composição de funções. Ele pode ser aplicado em situações do mundo real para criar código mais legível, modular e expressivo.

Botão Voltar ao Topo