Programação funcional: o que são funções puras, determinísticas e que não provocam efeitos colaterais
Lais Frigério
Posted on March 22, 2023
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.
Posted on March 22, 2023
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
March 22, 2023