Módulo 2 - Decisões que se ramificam
Cláusula de guarda e tabela de decisão
8 min de leitura · por Cesar Gargiulo, revisado pela equipe ValorFinal e GuardiaSec · Atualizado em 08/07/2026
O que você vai aprender
- Usar cláusulas de guarda para tratar casos inválidos no começo e sair.
- Transformar aninhamento profundo (código flecha) em código plano.
- Montar uma tabela de decisão para combinações de várias condições.
- Reconhecer combinações esquecidas usando a tabela como checklist.
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: Cláusula de guarda e tabela de decisão.
Os objetivos desta aula. Usar cláusulas de guarda para tratar casos inválidos no começo e sair. Transformar aninhamento profundo (código flecha) em código plano. Montar uma tabela de decisão para combinações de várias condições. Reconhecer combinações esquecidas usando a tabela como checklist.
Veja o essencial, parte por parte.
Resolva o impossível primeiro e saia. A cláusula de guarda trata o caso inválido logo no começo e encerra ali mesmo.
A cláusula de guarda na prática. Repare no ganho do exemplo do saque.
A tabela de decisão: a grade que não esquece nenhum caso. Quando a decisão depende de duas ou três condições que se cruzam, segurar todas as combinações de cabeça fica arriscado.
Esse foi o resumo do essencial. Para se aprofundar, leia a aula completa e responda os exercícios.
Resolva o impossível primeiro e saia
Lembra do aninhamento profundo, o código flecha da aula passada? A cláusula de guarda é o jeito elegante de evitá-lo. A ideia é inverter a lógica: em vez de embrulhar todo o programa dentro de um grande SE deu tudo certo, você trata os casos que dão errado logo na entrada e sai imediatamente de cada um. Quando o programa passa por todas as guardas, você tem a garantia de que tudo que precisava estar certo está, e o resto do código roda reto, sem um único nível de indentação extra. É como um segurança na porta da balada: quem não tem idade, quem não está na lista, quem está sem documento, cada um é barrado na entrada; lá dentro, todo mundo que passou está apto, sem precisar reconferir.
Com aninhamento (código flecha)
- se tem_conta então se tem_saldo então se valor_valido então ...
- O código escorrega para a direita a cada verificação.
- O bloco principal fica soterrado lá no fundo dos SE.
Com cláusulas de guarda (código plano)
- se não tem_conta: avise e saia. se não tem_saldo: avise e saia. se valor inválido: avise e saia.
- Cada problema é tratado e encerrado na entrada.
- O bloco principal fica no nível de fora, reto e visível.
função sacar(conta, valor)
se conta não existe então
escreva("Conta inválida")
retorne
fim
se valor <= 0 então
escreva("Valor inválido")
retorne
fim
se valor > conta.saldo então
escreva("Saldo insuficiente")
retorne
fim
// daqui para baixo, tudo está garantido:
conta.saldo <- conta.saldo - valor
escreva("Saque realizado")
fimTrês guardas tratam os problemas na entrada. O saque, o caso principal, fica reto no nível de fora.
A cláusula de guarda na prática
Repare no ganho do exemplo do saque. Depois das três guardas, quando o programa chega na linha que de fato subtrai o valor do saldo, você não precisa mais lembrar de nada: a conta existe, o valor é positivo e há saldo suficiente. Tudo isso já foi garantido acima. O caso principal, aquele que realmente interessa, fica limpo e no nível de fora, fácil de achar e de entender. Comparado com três SE aninhados terminando lá no fundo da indentação, a versão com guardas se lê como uma lista de pré-condições seguida da ação. Essa clareza é ouro quando outra pessoa (ou você mesmo daqui a seis meses) precisa mexer no código.
🎮 Jogo da aula
A guarda que faltou
Esta função deveria calcular a média de uma lista de notas, mas quebra quando a lista chega vazia. Toque na linha onde uma cláusula de guarda deveria ter entrado.
A tabela de decisão: a grade que não esquece nenhum caso
Quando a decisão depende de duas ou três condições que se cruzam, segurar todas as combinações de cabeça fica arriscado. É fácil escrever o código para três dos quatro casos e esquecer o quarto, aquele que só acontece de vez em quando e some dos testes. A tabela de decisão resolve isso no papel, antes de programar: você lista cada condição numa coluna, cada linha vira uma combinação de sim e não, e ao lado escreve a ação. Com duas condições, são quatro linhas; com três, oito. A tabela vira um checklist visual: se toda linha tem uma ação definida, nenhum caso ficou órfão.
| É cliente? | Tem cupom? | Ação |
|---|---|---|
| Não | Não | Preço cheio, oferecer cadastro. |
| Não | Sim | Cupom exige cadastro: pedir para se cadastrar. |
| Sim | Não | Preço de cliente, sem desconto extra. |
| Sim | Sim | Preço de cliente com o desconto do cupom. |
Duas condições, quatro combinações. A tabela garante que nenhuma das quatro foi esquecida.
Teste rápido
Uma regra depende de três condições que podem ser verdadeiras ou falsas de forma independente. Quantas linhas terá a tabela de decisão que cobre todas as combinações?
Perguntas frequentes
- Cláusula de guarda não é a mesma coisa que um SE comum?
- É um SE usado de um jeito específico: no começo, para tratar um caso inválido e sair imediatamente. A diferença está na intenção e no efeito. Em vez de aninhar o programa inteiro dentro do caso bom, a guarda descarta o caso ruim cedo, deixando o caminho principal reto. É um padrão de organização, não uma estrutura nova.
- Sair no meio da função com vários retornos não é confuso?
- Existe um debate antigo sobre isso, mas a prática moderna aceita bem os retornos de guarda no início justamente porque eles aumentam a clareza: cada um trata um problema e encerra. O que se evita é o retorno escondido no meio de uma lógica complexa. Guardas no topo, tratando pré-condições, são consideradas boa prática.
- Quando devo montar uma tabela de decisão?
- Quando a regra cruza duas, três ou mais condições e você sente que pode esquecer alguma combinação. A tabela é uma ferramenta de planejamento, do passo entender e planejar do método. Você a monta no papel, confere que toda linha tem ação, e só então traduz para código com segurança.
- A tabela de decisão vira código automaticamente?
- Não automaticamente, mas ela guia o código de perto. Cada linha da tabela costuma virar um ramo da decisão, e combinações que levam à mesma ação podem ser agrupadas. O valor principal é garantir cobertura: se a tabela está completa, você sabe que não deixou nenhum caso de fora.
- Quantas condições cabem numa tabela de decisão?
- Tecnicamente quantas você quiser, mas o número de linhas dobra a cada condição, então quatro condições já dão dezesseis linhas. Quando fica grande demais, é sinal de que a regra talvez precise ser quebrada em partes menores, cada uma com sua tabela, o que também melhora a organização do código.
- Guarda e tabela de decisão resolvem o mesmo problema?
- São complementares. A guarda organiza o fluxo eliminando aninhamento; a tabela organiza o pensamento garantindo que nenhuma combinação foi esquecida. Muitas vezes você usa a tabela para planejar quais casos existem e depois as guardas para escrever esses casos de forma plana e legível.
Fontes
Seu progresso fica salvo neste aparelho. Assinantes sincronizam entre os aparelhos.