Função Curry em JavaScript

Nov 27 2022
Entendendo JavaScript();
pegue uma vasilha, adicione um pouco de água, adicione algumas linhas de código, adicione algumas folhas de curry e masala (de acordo com o seu gosto), cozinhe em fogo baixo por 25 minutos e, aqui está a função curring, pronto para servir na produção . Brincadeira meninos e gols.

pegue uma vasilha, adicione um pouco de água, adicione algumas linhas de código, adicione algumas folhas de curry e masala (de acordo com o seu gosto), cozinhe em fogo baixo por 25 minutos e, aqui está a função curring, pronto para servir na produção . Brincadeira meninos e gols.

Olá, desenvolvedores JS. Estou de volta com um tópico quente “Function Currying”

Esta história abrange:

  • o que é currying, como funciona e por que é usado.

A história começa aqui

O que é uma função currying?

currying é transformar uma função que recebe vários argumentos [exemplo: functionName(a, b,c)] em várias funções que recebem um único argumento em uma sequência.

ok ok .., eu sei que soa confuso (confuso), também minhas reações foram as mesmas quando li isso pela primeira vez.

ok vamos entender facilmente, uma função (doSum) que recebe todos os argumentos de uma vez, ou seja, doSum(a, b, c) [exemplo abaixo: função de adição normal.

Função de adição normal

É transformado em várias funções (addNumbers(a), (b), (c)) que recebem um único argumento por vez em uma sequência.

Nota: A funcionalidade (finalidade) de ambas as funções é a mesma, apenas renomeadas para melhor entendimento.

Função Curry

aqui está qual função currying é de acordo com geeks para geeks :

É uma técnica em programação funcional, transformação da função de múltiplos argumentos em várias funções de um único argumento em sequência.

em palavras simples, a função em vez de receber todos os argumentos de uma vez, a função recebe o primeiro argumento e retorna a função que recebe o outro argumento e, em seguida, retorna novamente outra função que recebe o terceiro argumento e assim por diante até que todos os argumentos sejam tomadas (exemplo na imagem chamada: função currying).

Como funciona o curry?

curring em javascript pode ser um pouco complicado de entender, pois é javascript

mas vamos tentar entender melhor, abaixo está um exemplo de uma função simples

função simples

aqui a função “doSum” adiciona o argumento dado e retorna a soma de todos os argumentos passados.

abaixo está a versão curry da mesma função (apenas renomeada, para melhor compreensão)

a saída da função acima e abaixo será a mesma, 18

addNumbers é a versão atual da função acima doSum, addNumber a função pai pega o argumento ie 5 no nosso caso, e retorna outra função anônima que pega outro argumento ie 6 no nosso caso e o processo continua até que todos os parâmetros sejam passados, o A última função anônima retorna o valor após o processamento de todas as entradas.

implementamos funções aninhadas no exemplo acima, então cada uma das funções recebe um argumento e retorna outra função até que todos os argumentos não sejam concluídos.

você pode alterar sua função de 2 maneiras diferentes, usando a função de ligação e usando fechamentos, vamos ver como fica

função currying usando a função de ligação

se você não sabe o que é a função bind, veja essa minha história .

aqui no exemplo acima, estamos usando a função de ligação do javascript e, usando a função de ligação, estamos atualizando a função “onBoardUser”.

basicCompanyDetails é semelhante para todos os usuários integrados, então queremos disponibilizar os detalhes por padrão para todos os usuários integrados, aqui estamos passando um argumento “basicCompanyDetails” para a função de vinculação e criando uma instância de “onBoardUser”, aqui a função bind retorna a função que você pode armazenar em algum lugar da memória e executar depois, aqui estamos armazenando a função em addUser e estamos invocando para todos os usuários.

é assim que você pode alterar sua função usando a função de ligação em javascript. mais exemplos na imagem abaixo.

você também pode passar ambos os parâmetros ao chamar o método addUserToSales, ele produzirá os mesmos resultados.

função currying usando encerramentos.

os encerramentos são um conceito muito comum, mas complicado em javascript, mas não muito discutido, você pode ler sobre o que são encerramentos aqui .

vamos tentar implementar currying de função usando encerramentos.

no exemplo acima, criamos uma função “onBoardUser” que recebe um argumento e retorna outra função anônima que recebe outro argumento, soma os detalhes e retorna.

estamos chamando a função “onBoardUser” com um argumento, ou seja, accountDepartmentDetails e armazenando-o em uma variável (lembre-se que onBoardUser retorna uma função), então armazenamos uma função em uma variável addUsertoAccounts e agora a variável tem uma função que pode ser invocada a qualquer momento com um argumento que está pedindo, então invocamos a função anônima (retornada por onBoardUser) armazenada em addUsertoAccounts com um argumento (detalhes do usuário, ou seja, detailsOfJohn).

uma vez que a função é invocada, ela completou a execução da instrução presente dentro dela e imprimiu a saída.

se as funções fossem invocadas após algumas 10k linhas de código também, imprimiria a mesma saída, pois é um fechamento e lembra o escopo léxico dela.

Correndo com ES6:

curry usando ES6

é assim que você pode usar currying de funções com fechamentos em JS.

ainda assim, você pode ter uma pergunta em mente: se podemos passar vários argumentos para uma função, por que precisamos de currying?

isso provavelmente vai responder a essas dúvidas.

por que é usado

porque? porque? porque?

  • currying é uma técnica que divide funções em funções menores, cada função individual tem seu próprio trabalho e isso torna sua função pura e menos propensa a erros e efeitos colaterais.
  • exemplo: a primeira função valida os dados do usuário, a segunda valida os dados da empresa, etc.
  • é usado em programação funcional para usar funções de ordem superior
  • ele ajuda você a manter seu código limpo e organizado.
  • Além disso, você pode usar o currying como um mecanismo que ajuda a verificar se você tem tudo antes de prosseguir
  • exemplo: cada função aninhada não será executada se não obtiver os argumentos necessários.