Módulo 14 - Código que se lê

Funções pequenas e o princípio de não se repetir

8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 08/07/2026

O que você vai aprender

  • Entender por que cada função deve fazer uma coisa só.
  • Aplicar o princípio DRY: transformar código repetido em função.
  • Reconhecer os problemas da função gigante e do código duplicado.
  • Perceber que corrigir num lugar só é o grande ganho de não repetir.

Uma função, uma coisa

No módulo de decomposição você aprendeu a quebrar um problema grande em funções. Agora refinamos essa ideia com uma regra de tamanho: cada função deve fazer uma coisa só. Uma função que calcula a média, valida a nota e imprime o boletim faz três coisas, e por isso é difícil de entender, de testar e de reaproveitar. Quebrada em três funções, cada uma com um nome honesto, tudo melhora: você lê o programa principal como um resumo, testa cada parte isolada, e reusa a função de média em outro lugar sem carregar a impressão junto. O teste prático é o da conjunção: se você não consegue descrever o que a função faz sem usar a palavra e, ela provavelmente deveria ser mais de uma. Funções pequenas não são um capricho estético; elas são a unidade que a mente humana consegue segurar de uma vez.

A função gigante, aquela de duzentas linhas que faz de tudo, é um dos maiores inimigos da manutenção. Para entendê-la, você precisa segurar todas as suas partes na cabeça ao mesmo tempo, o que é exaustivo e propenso a erro. Para mudar uma parte, você teme quebrar outra, porque tudo está entrelaçado. E para testar, não dá para isolar nada. Quebrar essa função em pedaços pequenos, cada um com uma responsabilidade clara, desfaz esses três problemas de uma vez. Não existe um número mágico de linhas, mas a intuição é boa: se a função não cabe numa tela, ou se você precisa rolar e anotar para acompanhá-la, ela provavelmente está pedindo para ser dividida.

Não se repita: o princípio DRY

O segundo hábito é evitar a duplicação, resumido na sigla DRY, do inglês não se repita. A ideia é simples: quando o mesmo trecho de lógica aparece em dois, três ou mais lugares do código, isso é um sinal de alerta. O problema da duplicação não é o espaço que ela ocupa; é a manutenção. Imagine que a regra de calcular o frete está copiada em cinco telas diferentes. No dia em que o frete mudar, alguém vai ter que achar e corrigir as cinco cópias, sem esquecer nenhuma. Uma esquecida vira um bug: uma tela cobrando o frete antigo, e ninguém entende por quê. A solução DRY é escrever a regra do frete uma única vez, numa função calcular_frete, e chamá-la nas cinco telas. Agora, se o frete mudar, você corrige um lugar só, e as cinco telas mudam juntas, automaticamente. Não se repetir transforma cinco pontos de falha em um ponto de verdade.

// RUIM (repetido): a mesma conta de frete em vários lugares
totalA <- precoA + (precoA * 0.02)
totalB <- precoB + (precoB * 0.02)
totalC <- precoC + (precoC * 0.02)

// DRY: a regra do frete numa função, chamada onde precisar
função comFrete(preco)
  retorne preco + (preco * 0.02)
fim
totalA <- comFrete(precoA)
totalB <- comFrete(precoB)
totalC <- comFrete(precoC)
// se o frete mudar de 0.02 para 0.03, corrige-se UM lugar

A versão DRY concentra a regra numa função. Mudar o frete vira uma correção num lugar só, não três.

🎮 Jogo da aula

A cópia esquecida

A regra de desconto (10%) foi copiada em três lugares, mas numa delas o número ficou diferente por engano. Toque na linha com o valor errado.

DRY com bom senso

Como todo bom princípio, o DRY pede bom senso e não fanatismo. Nem toda repetição precisa virar função na hora; duas linhas parecidas que por acaso se assemelham, mas representam ideias diferentes, podem ser deixadas em paz, porque forçá-las numa função só as amarraria sem motivo. A pergunta certa não é as linhas são iguais?, e sim elas representam a MESMA regra ou ideia? Se sim, e se essa regra pode mudar, centralize-a: aí a duplicação é perigosa. Se são só coincidências passageiras, talvez juntá-las crie um acoplamento artificial. Uma regra prática dos programadores é a do três: na terceira vez que você copia o mesmo trecho de lógica de verdade, é hora de extrair uma função. Antes disso, tolere; a partir dali, a duplicação começa a cobrar caro na manutenção. O DRY, bem aplicado, é sobre ter uma única fonte de verdade para cada regra do seu programa.

Teste rápido

Qual é o principal benefício de aplicar o princípio DRY (não repetir a mesma lógica)?

Perguntas frequentes

Por que cada função deve fazer uma coisa só?
Porque uma função com uma responsabilidade clara é fácil de entender, testar e reaproveitar. Funções que fazem várias coisas ao mesmo tempo são difíceis de segurar na cabeça e de mudar sem quebrar. O teste é a conjunção: se você precisa da palavra e para descrever o que a função faz, ela provavelmente deveria ser mais de uma.
O que é o princípio DRY?
DRY vem de não se repita. Diz para não duplicar a mesma lógica pelo código: em vez de copiar um trecho em vários lugares, escreva-o uma vez numa função e chame-a. Assim, quando a regra muda, você corrige num lugar só, e todos os usos mudam juntos. Evita o bug da cópia esquecida.
Qual o problema real do código duplicado?
Não é o espaço, é a manutenção. Se a mesma regra está copiada em cinco lugares e precisa mudar, alguém tem que achar e corrigir as cinco, sem esquecer nenhuma. Uma cópia esquecida vira um bug difícil de rastrear. A duplicação transforma um ponto de verdade em vários pontos de falha.
Toda repetição precisa virar função?
Não. O DRY pede bom senso. A pergunta certa é se os trechos representam a mesma regra, não se as linhas são parecidas por acaso. Coincidências passageiras podem ficar como estão; forçá-las numa função cria acoplamento artificial. A regra do três ajuda: na terceira cópia real da mesma lógica, extraia uma função.
Existe um número máximo de linhas para uma função?
Não há número mágico, mas a intuição é boa: se a função não cabe numa tela, ou se você precisa rolar e anotar para acompanhá-la, ela provavelmente está grande demais e pedindo para ser dividida. O critério real é a responsabilidade: uma função, uma coisa, pequena o bastante para caber na cabeça.
Funções pequenas não deixam o código mais espalhado?
Ficam mais funções, sim, mas cada uma é simples e bem nomeada, e o programa principal vira um resumo legível de chamadas. Isso é muito mais fácil de entender e manter do que uma função gigante entrelaçada. O espalhamento organizado, com bons nomes, é uma vantagem, não um problema.

Fontes

Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.