Introdução
Sempre que lhe falarem sobre funções puras tenha em mente o seguinte.
Funções puras são funções que dado um parâmetro input sempre vão retornar o mesmo output sem causar efeitos colaterais side effects.
Side effects quando ocorrem?
Side effects (efeitos colaterais) ocorrem quando uma função ao ser executada causa mudanças no estado da aplicação, o que são chamadas de funções impuras.
Por que usar funções puras?
Vou citar alguns tópicos que tornam tão interessante o uso desse tipo de função. Veja a seguir:
Refatoração
Refatore seu código sempre que possível, funções puras te proporcionam a facilidade de mudança para que você possa observar melhorias e aplica-las sem afetar o restante de sua aplicação.
Testabilidade
Pelo simples motivo de funções puras terem seus valores de entrada e saída determinados, isso vai facilitar muito a escrita de seus códigos unitários.
DRY (Don’t Repeat Yourself)
Reutilize suas funções! DRY (Não repita a si mesmo).
Devo usar apenas funções puras?
Não! É importante perceber que funções puras mesmo oferecendo diversos benefícios, não são utilizadas em todo o projeto. Afinal de contas, se todas as funções de seu projeto fossem funções puras, não haveriam efeitos colaterais side effects onde são visíveis ao mundo externo. Certifique-se de utilizar funções puras quando necessário, crie testes unitários e sem dúvidas quando houverem bugs, será mais fácil para você desvendá-los e efetuar sua correção.
Vamos praticar!
Vamos criar duas funções uma função pura e outra impura. Confira:
Função Pura:
## ES6 ##
const sum = (x, y) => x+y;
## ES5 ##
var sum = function (x, y) {
return x + y;
}
Função Impura:
## ES6 ##
const x = 20;
const sum = (y) => x+y;
## ES5 ##
var x = 20;
var sum = function (y) {
return x+y;
}
Repare que a variável x
está sendo definida no estado global da aplicação, sendo assim o output da função sum
sempre dependerá da mudança de estado global e não pelo input passado como parâmetro, o que torna a função dependente de fatores externos.
Conclusão
É isso aí galera, espero que esse post ajude vocês no desenvolvimento de belas funções, gerando maior produtividade para você e sua equipe.
Ah, se você tem alguma dúvida ou sugestão, faça nos comentários, estou sempre atento!