A caixa de ferramentas do JS funcional – Parte 1 (Curry e Partialize)

Eliseu Codinhoto (@zeucxb)
Training Center
Published in
3 min readJun 21, 2018
https://twitter.com/lambda_js

Essa introdução é uma breve contextualização do contexto pessoal atual no qual escrevo esse post. Pode ser pulada sem prejudicar o entendimento.

Minha história com o javascript começou há alguns anos, ví a linguagem passar por diversas mudanças e eu também passei. Como uma linguagem popular, o javascript ou js para os intimos divide opiniões na comunidade, eu mesmo já amei, odiei e voltei a amar.

Mas voltando para as mudanças, após trabalhar com javascript me aventurei pelo mundo da programação concorrente/paralela e me maravilhei com as goroutines e channels do go(golang) e imagino que alguns me conheçam dessa época. Mas foi um pouco depois que comecei a ver as coisas (na programação) de uma forma levemente diferente.

Tinha ouvido falar de uma linguagem chamada Elixir e de um tal paradigma funcional, resumindo (pq acho que já me perdi nessa introdução) fui atrás de aprender mais sobre isso, tive contato com ELM, trabalhei com Elixir e brinquei um pouco de Clojure.

Porém, todavia, entretanto. Voltei a trabalhar com javascript recentemente e meu objetivo com esse post é apresentar algumas "ferramentas" funcionais que trouxe comigo e que me ajudam a solucionar os problemas do dia-a-dia.

Tentarei abordar de forma prática e apresentar exemplos reais. Bóra!!!

Para quem prefere assistir

Após escrever essa primeira parte do artigo palestrei no 7Masters sobre o tema.

Não vou fazer uma introdução ao tema aqui, pois o objetivo não é esse, mas é muito fácil encontrar posts sobre.

Currying

Vamos lá, vou começar por aqui pois acredito ser um mecanismo naturalmente simples de entender e que pode nos dar diversos benefícios permitindo o reuso de código.

Legal, mas todas as vezes que usarmos chatMessage vamos precisar passar todos esses parâmetros, e se olharmos bem username e room repetem bastante.

Vamos tentar melhorar isso.

Hmm, agora podemos reusar a função chatMessage para criar novas funções como a jsMessages que também é reusável e assim por diante. Mas se quisermos passar todos os parâmetros para a função? Nesse caso precisamos fazer assim:

chatMessage('js')('zeucxb')('Functional js!')

Não está tão legal, seria bem melhor poder chamar a função chatMessage com qualquer quantidade de parâmetros válida e caso ainda falte parâmetros receber de volta uma função que espera os parâmetros restantes para retornar o resultado.

Falei parametro muitas vezes, parece confuso rsrs. Mas não é.

Felizmente as funções do javascript tem um método que faz exatamente isso, você já deve ter usado alguma vez e talvez não saiba dessa funcionalidade.

Vamos melhorar isso com um pouco de abstração :D

Ficou bom, outra forma de resolver isso e ainda mais estilosa é assim:

Conclusão

Essa é a parte 1 de uma série de posts que pretendo fazer sobre as ferramentas do javascript funcional.

Nesse primeiro aprendemos partialize e curry, espero que isso te ajude a resolver problemas no seu dia-a-dia. Até a próxima :)

--

--