🦾 Um poder maneiro para o Javascript
Javascript e o Currying
Currying e aplicação parcial
Em algumas linguagens de programação, geralmente funcionais, existe um conceito que simplifica da maneira mais direta, você consegue criar uma função que recebe vários argumentos e passar argumentos de forma parcial.
Essa é a famosa aplicação parcial!
mas como assim?
Ok, imagine que você precisa criar uma função que faça a soma de dois números
função Somar (primeiroNumero, segundoNumero) { retorna primeiroNumero + segundo Numero }
Digamos que por algum motivo, é interessante você criar uma variável que receba essa função, porém com apenas um argumento, e depois de alguma outra rotina, você passa o segundo argumento.
variavel novaSoma = Somar(2)
Dependendo da linguagem de programação, o compilador provavelmente interpretará um erro, ou retornar um tipo - como no javascript - NaN (not a number), mas caso pudesse - nativamente - fazer isso, você poderia futuramente chamar essa função passando o outro parâmetro.
novaSoma(3)
E ela retornaria o valor de 5 (2 + 3)
Esse é o bendito processo de Currying - em homenagem a Haskell Curry.
E a notícia boa é que algumas linhas de código você pode trazer isso para o javascript.
Aplicando o cuyrring ao javascript
Agora que você já sabe os dois principais conceitos, você pode utilizá-los no javascript. Da uma olhada no código de exemplo abaixo.
const somar = (x, y) => {
if (typeof y === "undefined") {
return function (y) {
return x + y
};
}
return x + y
}
A função basicamente irá checar a existência do segundo argumento, caso os dois argumentos existam, a função executa sua rotina inicial normalmente, mas caso o segundo parâmetro esteja ausente, a rotina cairá em uma condição que caso seja verdadeira (inexistencia do segundo parâmetro), ela irá retornar uma nova função que aguarda apenas um argumento e efetuará a rotina normal.
Exemplos práticos
Com o currying você pode criar funções que "esperam" os argumentos chegarem em qualquer momento do seu código.
const add = somar(2)
E futuramente você pode passar um novo argumento para essa variável que já está salva em memória com a função somar.
add(3)
E o retorno dela será 5.
Quando aplicar o currying
Apesar da técnica ser bastante útil, não é a todo momento que você pode ir acrescentando ao seu código, seria mais interessante em casos que:
- Você precisa chamar a mesma função várias vezes e com argumentos parecidos ou iguais.
- Seu código compartilha o mesmo métodos em diferentes momentos do projeto.
- Quando você precisa criar um contexto compartilhado em todo o projeto.
Obrigado!
Espero que o currying possa ajudar vocês assim como vem me ajudando em alguns projetos!
Até mais!