Skip to content
Latchkey

O Que É uma Função Pura? Mesma Entrada, Mesma Saída

Uma função pura sempre retorna a mesma saída para a mesma entrada e não causa efeitos colaterais observáveis, então ela não depende de nada além de seus argumentos.

Pureza é uma propriedade simples e poderosa. Uma função pura é totalmente determinada por suas entradas: dê a ela os mesmos argumentos e ela sempre retorna o mesmo resultado, e executá-la não muda mais nada no programa. Nada de ler o relógio, nada de escrever no disco, nada de mutar estado compartilhado. Essa previsibilidade torna as funções puras o código mais fácil de testar e raciocinar.

As duas regras da pureza

Uma função é pura se (1) seu valor de retorno depende apenas de suas entradas, e (2) ela não produz efeitos colaterais, nenhuma mutação de estado externo, nenhum I/O, nenhuma aleatoriedade. Quebre qualquer regra e a função é impura.

Por que a pureza importa

  • Trivial de testar: sem preparação, sem mocks, apenas entradas e saídas esperadas.
  • Seguro para cachear (memoizar), já que o resultado nunca varia para dadas entradas.
  • Seguro para executar em paralelo, sem estado compartilhado para disputar.
  • Fácil de raciocinar, porque nada oculto afeta o resultado.

Pura vs impura

Programas reais precisam de efeitos colaterais (salvar dados, chamar APIs), então nem tudo pode ser puro. O padrão comum é manter um núcleo puro de lógica e empurrar efeitos impuros para as bordas, onde são mais fáceis de controlar e testar.

Pureza e determinismo

Funções puras são determinísticas, que é exatamente o que testes confiáveis querem. Testes que dependem do relógio, aleatoriedade ou chamadas de rede são impuros e tendem a apresentar instabilidade. Isolar a impureza é um caminho direto para suítes de testes estáveis.

Um exemplo rápido

Uma função add(a, b) => a + b é pura: as mesmas entradas sempre dão a mesma saída, e ela não toca em mais nada. Uma função que retorna Date.now() é impura, já que sua saída muda ao longo do tempo.

Funções puras em CI

Testes sobre funções puras são determinísticos e raramente apresentam instabilidade, então uma falha é um bug real que vale a pena expor, não repetir. A Latchkey repete automaticamente falhas transitórias de infraestrutura, mas deixa as falhas de teste genuínas e repetíveis persistirem para que não sejam ocultadas.

Principais conclusões

  • Uma função pura retorna a mesma saída para a mesma entrada e não tem efeitos colaterais.
  • Pureza torna o código fácil de testar, cachear, paralelizar e raciocinar.
  • Empurrar efeitos colaterais para as bordas gera uma suíte de testes determinística e de baixa instabilidade.

Guias relacionados