Módulo 12 - Funções, as máquinas do algoritmo
Quebrando um problema grande em funções pequenas
9 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 02/07/2026
O que você vai aprender
- Aplicar a decomposição: do problema grande às máquinas pequenas.
- Dar a cada função uma responsabilidade única e um nome de verbo.
- Montar o programa principal como maestro que chama as funções na ordem.
- Testar cada máquina sozinha antes de ligar a fábrica inteira.
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: Quebrando um problema grande em funções pequenas.
Os objetivos desta aula. Aplicar a decomposição: do problema grande às máquinas pequenas. Dar a cada função uma responsabilidade única e um nome de verbo. Montar o programa principal como maestro que chama as funções na ordem. Testar cada máquina sozinha antes de ligar a fábrica inteira.
Veja o essencial, parte por parte.
Uma fábrica de máquinas, não um monstro de mil linhas. Decomposição é dividir o problema grande em funções pequenas, cada uma com UMA responsabilidade clara.
O método da decomposição, passo a passo. A decomposição tem um método que funciona para qualquer tamanho de problema.
Uma responsabilidade por máquina. processar_venda que calcula o troco E imprime o recibo E atualiza o estoque: três responsabilidades, separe.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Uma fábrica de máquinas, não um monstro de mil linhas
Seus algoritmos cresceram módulo após módulo: entrada, contas, decisões, laços, listas. Junte tudo num problema real e a tentação é escrever um bloco único de sessenta linhas, um monstro onde ninguém acha nada. A alternativa dos programadores experientes é pensar como uma fábrica: nenhuma fábrica tem uma máquina gigante que faz tudo; tem máquinas pequenas e especializadas, ligadas numa linha de montagem. Decompor é isso: olhar o problema e perguntar quais são as máquinas antes de escrever a primeira linha.
Tome um problema concreto: o relatório da cantina da escola. O programa precisa ler as vendas do dia, somar o total, calcular a média por venda e mostrar um resumo caprichado. Um iniciante ataca tudo de uma vez. Quem decompõe enxerga quatro máquinas: ler_vendas devolve a lista de valores; somar_total recebe a lista e retorna a soma; calcular_media recebe a lista e retorna a média; mostrar_resumo recebe total e média e imprime o relatório. Repare que as três primeiras são funções com retorno e a última é um procedimento: cada peça do módulo no seu lugar.
// programa principal do relatório da cantina
vendas <- ler_vendas()
total <- somar_total(vendas)
media <- calcular_media(vendas)
mostrar_resumo(total, media)
// quatro linhas que se leem como um resumo do problemaO programa principal é o chef: comanda as máquinas na ordem e cabe numa tela.
O método da decomposição, passo a passo
A decomposição tem um método que funciona para qualquer tamanho de problema. Comece lendo o enunciado e listando as tarefas grandes em português, sem pensar em código. Dê a cada tarefa um nome de verbo que caberia num botão: ler_vendas, calcular_media. Escreva as funções uma por vez, da mais simples para a mais difícil, e teste cada uma sozinha com valores conhecidos: calcular_media com a lista 10, 20 e 30 tem que retornar 20, e você sabe disso antes de rodar. Só então monte o programa principal chamando as máquinas na ordem, e feche testando o conjunto de ponta a ponta.
🎮 Jogo da aula
Monte a linha de produção
Um programador experiente ataca um problema grande nesta ordem. Toque os passos na sequência correta.
O passo de testar cada função sozinha merece destaque, porque é ele que transforma a decomposição em superpoder de caça a bugs. Se o relatório da cantina sai com a média errada, o monstro de sessenta linhas obriga você a reler tudo. Na versão decomposta, você testa calcular_media isolada em trinta segundos: se ela devolve 20 para a lista 10, 20 e 30, a máquina está inocente e a suspeita muda de lugar. Investigar quatro máquinas pequenas é mais rápido que investigar um monstro, pela mesma razão que o mecânico testa peça por peça em vez de desmontar o carro inteiro.
Uma responsabilidade por máquina
Falta o critério de corte: o que faz uma divisão ser boa? A resposta clássica é a responsabilidade única: cada função deve fazer UMA coisa, e o nome deve contar qual é. Um teste prático é tentar descrever a função sem usar a palavra “e”. Se a descrição sai “calcula a média E mostra o relatório E salva no histórico”, são três máquinas grudadas pedindo separação. Máquinas de uma responsabilidade só são fáceis de nomear, fáceis de testar e fáceis de reaproveitar, o assunto da última aula deste módulo.
Teste rápido
A função fechar_pedido calcula o total, aplica o desconto, imprime a nota e envia o e-mail. Pelo critério da responsabilidade única, qual é o diagnóstico?
Perguntas frequentes
- Como sei se dividi demais? Existe função pequena demais?
- Existe, mas é o erro raro. Se uma função de uma linha só repassa o trabalho para outra sem transformar nada, ela pode ser dispensável. Na dúvida entre dividir mais ou menos, divida mais: o custo de uma máquina pequena extra é baixo, e o custo de um monstro é alto.
- Em que ordem devo definir as funções no arquivo?
- O costume é definir as máquinas primeiro e deixar o programa principal por último, para que toda função exista antes de ser chamada. Dentro do bloco de definições, agrupe por assunto: primeiro as de leitura, depois as de cálculo, por fim as de exibição.
- O programa principal também é uma função?
- Em muitas linguagens reais, sim: costuma ser uma função especial (como a main) executada quando o programa inicia. No pseudocódigo do curso, ele é simplesmente o trecho fora de qualquer função. A ideia é a mesma: um lugar único que coordena o fluxo.
- Decomposição serve para problemas pequenos também?
- Serve, com dose menor. Um algoritmo de dez linhas pode viver sem funções; um de trinta já agradece duas ou três. O hábito de listar as tarefas antes de codar vale para qualquer tamanho, porque organiza o pensamento mesmo quando você decide não dividir.
- Como testo uma função sozinha, na prática?
- Chame a função com entradas cujo resultado você já conhece e compare: calcular_media(10, 20, 30) tem que dar 20; troco(50, 30) tem que dar 20. No Playground de Lógica do curso, basta definir a função e chamá-la com esses valores. É a semente do teste de mesa formal do módulo 13.
- E se duas funções precisarem compartilhar informação?
- Elas conversam pelas portas oficiais: uma retorna o valor, o programa principal guarda numa variável e passa como argumento para a outra. É a esteira entre as máquinas. Evite atalhos por variáveis soltas fora das funções: máquina que depende de caixa escondida é máquina impossível de testar sozinha.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.