Em suma, efeitos colaterais na programação são todas as ações não relacionadas à leitura de valores de entrada e retorno do valor de saída à função principal. Os principais exemplos de efeitos colaterais são a alteração no valor de variáveis globais, das variáveis de entrada e operações de entrada/saída como impressões no terminal.
Os efeitos colaterais têm como desvantagens a maior dificuldade de depuração de código e redução na modularização do código. Como linguagens funcionais baseiam-se na inexistência de efeitos colaterais, as funções destas apenas realizam a leitura de dados de entrada e retornam o valor de saída da expressão definida pela sua função. As vantagens são a maior modularidade (pois cada manipulação invoca uma função específica) e facilidade em realizar testes, visto que apenas a saída da função é retornada à função invocadora.
Na programação funcional, os dados passados como parâmetros de função nunca são alterados. Além disso, declarações de funções e variáveis (que nesse contexto podem ser chamadas de constantes) não podem mais serem alteradas após a sua criação.
As vantagens da aplicação de dados imutáveis na programação funcional incluem a segurança em relação a dados mutáveis e também são mais amigáveis para aplicações em paralelo.
Dados Imutáveis
Exemplo de imutabilidade em Haskell:
Exemplo de mutabilidade em Python:
Dados Colaterais
Exemplo de dados colaterais em C:
Exemplo de inexistência de dados colaterais em Haskell: