Programação funcional é um paradigma de construção e desenvolvimento de um software baseado em funções. Essas funções podem ser puras, que não provocam efeitos colaterais, ou impuras.
Funções Puras
É uma função que dada a mesma entrada (parâmetros), sempre retornará a mesma saída. Por conta disso, também são conhecidas como funções determinísticas.
A função a seguir, responsável por somar 2 valores, sempre retorna a mesma saída quando a mesma entrada é informada:
function sum (num1, num2) {
return num1 + num2
}
sum(1,2) // sempre vai retornar 3
sum(2,2) // sempre vai retornar 4
Além disso, funções puras também são conhecidas por não provocarem mutação de estado ou efeitos colaterais. Isso significa que uma dependência externa (e.g variável) nunca pode ser alterada.
A seguir, vamos conhecer alguns exemplos de funções impuras.
Funções Impuras
Analise o seguinte trecho de código:
let message = 'Hello'
function showMessage (newMessage = message) {
message = newMessage
alert(message)
}
showMessage() // o alerta exibe o texto 'Hello'
console.log(message) // Hello
showMessage('Bye, Bye') // o alerta exibe o texto 'Bye, Bye'
console.log(message) // Bye, Bye
A função showMessage
provoca um efeito colateral ao alterar o estado de uma variável externa: message
. Logo, esta função é considerada impura.
Se uma função tem dependência de uma ou mais variáveis que podem ser alteradas, a função é considerada impura.
Lembra que as funções puras retornam sempre o mesmo valor ao passar como parâmetro a mesma entrada?
Pois bem, nas funções impuras isto não acontece.
As funções impuras podem retornar diferentes valores para a mesma entrada. No exemplo a seguir, a função multiplication
pode retornar um valor diferente a cada chamada:
let multiplicationTable = 2;
function multiplication(num) {
return num * multiplicationTable
}
Neste caso, a função multiplication
tem uma dependência externa, a variável multiplicationTable
. Ao chamar a função multiplication
passando o valor 5 como parâmetro o retorno é 10:
multiplication(5) // retorna 10
Mas, se o valor da variável multiplicationTable
for alterado em outro momento no código, ao acionar a função multiplication
mesmo passando o valor 5 como parâmetro, a função vai ter um retorno diferente:
multiplicationTable = 3
multiplication(5) // retorna 15
Conclusão
Um software construído com base no paradigma funcional é composto tanto por funções puras e impuras. O ideal é construir uma aplicação através do desenvolvimento do maior número possível de funções determinísticas.
As funções puras são mais fáceis de testar, debugar e de fazer manutenção. Além do mais, é altamente recomendável que seu código tenha uma alta cobertura de casos de testes para funções puras.
Top comments (0)