E aí, pessoal! Tudo certo?
Hoje vou começar a falar um pouco sobre programação funcional utilizando JavaScript, bem como as características desse paradigma e vou entrar na primeira parte desta série, que trará os conceitos e as definições das funções puras.
O que é programação funcional?
Nada mais é do que um paradigma onde os programas são executados por meio de avaliação de funções. No sentindo mais puro, é baseada em como funções, variáveis e valores trabalham de fato na matemática.
Além disso, usam uma abordagem mais declarativa do que imperativa em suas estruturas. Sendo assim, temos princípios fundamentais da programação funcional, sendo eles: funções puras, imutabilidade, recursão, composição de função, funções de primeira classe, lambdas e closures.
Neste primeiro artigo, falarei exclusivamente sobre funções puras.
Funções puras
Para uma função ser considerada pura, ela necessariamente tem que ter duas características:
- 1 – Dada a mesma entrada, sempre retornará a mesma saída: a função sempre dá o mesmo valor de retorno para os mesmos argumentos. Isso significa que a função não pode depender de nenhum estado mutável (objetos mutáveis são objetos cujo estado pode mudar, instanciar e atribuir valor a uma variável).
- 2 – Não causa efeito colateral: a função não pode causar efeitos colaterais. Ou seja, a função não acessa ou altera valores globais. Os efeitos secundários podem incluir Entrada/Saída (console.log, Math.random,Date.now).
Exemplo de função pura:
const multiplica = (a, b) => a * b;
Quais as vantagens de se utilizar uma função pura?
- Elas são de fácil processamento, teste e depuração, por não dependerem de estados mutáveis.
- O valor de retorno pode ser guardado, evitando assim uma re-computação no futuro.
- São mais fáceis de testar porque não há dependências (como log, ajax, banco de dados, etc) que precisam ser mockadas.
Como podemos ver, nem todas as funções de nossos sistemas serão puras, mas podemos tentar utilizar as funções puras em pelo menos 80% dos casos, sendo o valor restante destinado a funções de gravação de log, recuperação de data, valores randômicos e etc.