Como Curry Funções em JavaScript
LarLar > blog > Como Curry Funções em JavaScript

Como Curry Funções em JavaScript

Aug 17, 2023

Esse recurso da linguagem JavaScript pode ajudar a organizar seu código e proporcionar uma nova compreensão de como as funções funcionam.

As funções Curried podem ajudar a tornar seu código JavaScript mais legível e expressivo. A técnica currying é ideal quando você deseja dividir lógica complexa em pedaços de código menores, independentes e mais gerenciáveis.

Aprenda tudo sobre funções com curry em JavaScript, como usar a técnica de curry de função para criar funções parcialmente aplicadas, bem como casos de uso da vida real para funções com curry e funções parcialmente aplicadas.

Currying recebeu o nome do matemático Haskell B. Curry, e o conceito deriva do cálculo Lambda. Currying pega uma função que recebe mais de um parâmetro e a divide em uma série de funções unárias (um parâmetro). Em outras palavras, uma função curried aceita apenas um parâmetro por vez.

Abaixo está um exemplo de função curry:

OconstruirSandwich()função retorna outra função - uma função anônima que recebe oingrediente2 argumento. Então, esta função anônima retorna outra função anônima que recebeingrediente3 . Por fim, esta última função retorna o template literal, uma forma de formatar strings em JavaScript.

O que você criou é uma função aninhada onde cada função chama aquela que está abaixo dela até chegarmos ao fim. Agora, quando você ligarconstruirSandwich()e passar um único parâmetro, ele retornará a parte da função cujos argumentos você ainda não forneceu:

Você pode ver na saída que buildSandwich retorna uma função:

Para completar a chamada de função, você precisaria fornecer todos os três argumentos:

Este código passa “Bacon” para a primeira função, “Alface” para a segunda e “Tomate” para a última função. Em outras palavras, oconstruirSandwich()A função é realmente dividida em três funções, com cada função recebendo apenas um parâmetro.

Embora seja perfeitamente válido fazer curry usando as funções tradicionais, todo o aninhamento pode ficar bem feio à medida que você se aprofunda. Para contornar isso, você pode usar funções de seta e aproveitar sua sintaxe mais limpa:

Esta versão refatorada é mais concisa, uma vantagem de usar funções de seta em vez de funções regulares. Você pode chamar a função da mesma forma que fez com a anterior:

Funções parcialmente aplicadas são um uso comum do currying. Esta técnica envolve fornecer apenas os argumentos necessários de cada vez (em vez de fornecer todos os argumentos). Sempre que você invoca uma função passando todos os parâmetros necessários, você diz que “aplicou” aquela função.

Vejamos um exemplo:

Abaixo está a versão com curry de multiplicar:

OcurryMultiply()função recebe oxargumento para a primeira função esimpara a segunda função, então multiplica ambos os valores.

Para criar a primeira função parcialmente aplicada, chamecurryMultiple()com o primeiro parâmetro e atribua a função retornada a uma variável:

Neste ponto, o código "aplicou parcialmente" ocurryMultiply() função. Então, sempre que você quiser ligarvezesDez(),você só precisa passar um número e o número será automaticamente multiplicado por 10 (que é armazenado dentro da função aplicada):

Isso permite que você desenvolva uma única função complexa criando diversas funções personalizadas a partir dela, cada uma com sua própria funcionalidade bloqueada.

Dê uma olhada em um exemplo que está mais próximo de um caso de uso real de desenvolvimento web. Abaixo você tem umatualizarElemText()função que recebe um elementoeu iana primeira chamada, o conteúdo na segunda chamada e, em seguida, atualiza o elemento com base noeu iae conteúdo que você forneceu:

Outro uso comum do curry é a composição de funções. Isso permite chamar funções pequenas, em uma ordem específica, e combiná-las em uma função única e mais complexa.