Módulo 8 - Funções que valem ouro
Funções puras e efeitos colaterais
8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 08/07/2026
O que você vai aprender
- Entender o que é uma função pura: mesma entrada, mesma saída, sem efeitos.
- Reconhecer efeitos colaterais (mexer em algo fora da função).
- Perceber por que funções puras são mais fáceis de testar e confiar.
- Classificar funções entre puras e com efeito colateral.
Ouvir o resumo desta aula
Um recap de cerca de 2 minutos na voz do Valim, para ouvir no trânsito ou na academia.
Ler a transcrição do resumo
Resumo da aula: Funções puras e efeitos colaterais.
Os objetivos desta aula. Entender o que é uma função pura: mesma entrada, mesma saída, sem efeitos. Reconhecer efeitos colaterais (mexer em algo fora da função). Perceber por que funções puras são mais fáceis de testar e confiar. Classificar funções entre puras e com efeito colateral.
Veja o essencial, parte por parte.
Dois tipos de função. Função pura: calcula só a partir do que recebe e devolve o resultado, sem mexer em nada fora.
Reconhecer um efeito colateral. Como saber se uma função tem efeito colateral?
O equilíbrio na prática. Nenhum programa útil é feito só de funções puras: em algum momento ele precisa mostrar algo na tela, salvar um arquivo, receber um clique.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Dois tipos de função
Depois de entender parâmetros, retorno e escopo, dá para enxergar uma distinção elegante entre dois tipos de função. De um lado, as funções puras: elas recebem argumentos, calculam algo apenas com base neles e devolvem o resultado por retorno, sem tocar em mais nada. Uma função que soma dois números e retorna a soma é pura: dê a ela 3 e 4 e ela sempre devolve 7, hoje, amanhã, chamada mil vezes. Do outro lado, as funções com efeito colateral: além de calcular, elas causam alguma mudança no mundo fora delas, imprimem na tela, alteram uma variável global, salvam um dado, modificam uma lista que receberam. As duas são úteis, mas têm personalidades bem diferentes.
A grande virtude da função pura é a previsibilidade. Como o resultado dela depende só dos argumentos, e ela não mexe em nada externo, você sabe exatamente o que esperar: mesma entrada, mesma saída, sempre. Isso a torna fácil de entender (basta olhar os argumentos e o retorno), fácil de testar (você chama com valores conhecidos e confere o resultado) e segura de reutilizar (ela não vai bagunçar nada por baixo dos panos). A função com efeito colateral é menos previsível porque o resultado do programa passa a depender de coisas de fora: o valor de uma variável global, o estado de um arquivo, a ordem em que as funções foram chamadas. Não é que efeitos sejam ruins, são necessários, mas exigem mais atenção.
Reconhecer um efeito colateral
Como saber se uma função tem efeito colateral? Pergunte: além de calcular e retornar, ela muda alguma coisa que existe fora dela, ou depende de algo externo que pode variar? Se ela imprime na tela, tem efeito (mexeu na tela). Se altera uma variável global, tem efeito. Se modifica uma lista que recebeu como argumento, tem efeito (a lista de fora mudou). Se lê a data de hoje ou um número aleatório, ela depende de algo externo, então nem sempre dá o mesmo resultado. Já uma função que só olha seus argumentos, faz uma conta e retorna, sem tocar em nada mais, é pura. Um bom exercício ao escrever uma função é perguntar-se: dá para deixá-la pura? Muitas vezes dá, e o código fica melhor.
🎮 Jogo da aula
Pura ou com efeito colateral?
Para cada função descrita, decida se ela é pura (só calcula e retorna) ou tem efeito colateral (mexe fora ou depende de fora).
O equilíbrio na prática
Nenhum programa útil é feito só de funções puras: em algum momento ele precisa mostrar algo na tela, salvar um arquivo, receber um clique. Efeitos são o que conectam o programa ao mundo real. A sabedoria não é eliminar os efeitos, é concentrá-los. Uma abordagem que os bons programadores adotam é manter o miolo do cálculo em funções puras, previsíveis e testáveis, e empurrar os efeitos (imprimir, salvar, ler) para as bordas do programa, em funções específicas. Assim a lógica difícil, a conta que precisa estar certa, fica isolada e fácil de conferir, enquanto os efeitos ficam poucos e concentrados. Você não precisa levar isso ao extremo agora, mas guardar a distinção entre calcular e causar efeito já melhora muito a organização do seu código, e é um sinal de maturidade que aparece cedo em quem programa bem.
Teste rápido
Por que uma função pura é mais fácil de testar do que uma com efeito colateral?
Perguntas frequentes
- O que é uma função pura, em uma frase?
- É uma função que calcula seu resultado apenas a partir dos argumentos e o devolve por retorno, sem mexer em nada fora dela e sem depender de nada externo. Chamada com os mesmos argumentos, ela dá sempre o mesmo resultado. Soma, média e desconto costumam ser funções puras.
- O que conta como efeito colateral?
- Qualquer coisa que a função faz além de calcular e retornar: imprimir na tela, alterar uma variável global, modificar uma lista recebida, salvar um arquivo, ler a data ou um número aleatório. Esses efeitos fazem a função interagir com o mundo fora dela, o que a torna menos previsível.
- Efeitos colaterais são ruins?
- Não: são necessários. Um programa precisa mostrar coisas, salvar dados, reagir a cliques, e tudo isso são efeitos. O que se recomenda é usá-los com consciência e concentrá-los, mantendo o miolo do cálculo em funções puras. O problema não é ter efeitos, é espalhá-los de forma descontrolada.
- Por que funções puras são mais fáceis de testar?
- Porque a saída depende só da entrada. Você chama a função com valores conhecidos e confere se o retorno bate, sem precisar preparar variáveis globais, arquivos ou telas. Uma função com efeito exige montar e conferir esses estados externos, o que torna o teste mais trabalhoso e sujeito a surpresas.
- Como deixo uma função mais pura?
- Fazendo-a receber tudo de que precisa por parâmetro e devolver o resultado por retorno, em vez de ler ou alterar variáveis de fora. Se ela imprime, considere retornar o valor e deixar a impressão para quem chama. Nem toda função dá para ser pura, mas muitas dão, e o código melhora quando são.
- Essa distinção importa mesmo para quem está começando?
- Importa, e cedo. Perceber a diferença entre calcular e causar efeito já organiza o pensamento e o código. Você não precisa ser radical, mas manter a lógica de cálculo separada dos efeitos torna seus programas mais previsíveis e fáceis de consertar. É um hábito que rende por toda a vida de programador.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.