E ae pessoal, tudo certo ?! Hoje vou começar a falar um pouco sobre programação funcional utilizando Javascript, quais as características desse paradigma e especialmente entrar na primeira parte dessa série, que são os conceitos e definições de funções puras.
O que é programação funcional?
Nada mais é 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 de que usam uma abordagem mais declarativa 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.
Nesse primeiro artigo, irei falar exclusivamente sobre:
Funções Puras
Para uma função ser considerada pura ela necessariamente tem que ter duas características, sendo elas:
- 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).
- 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, testes 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, destinados a funções de gravação de log, recuperação de data, valores randômicos e etc.
Top comments (0)