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.

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")
fim

Trê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ãoNãoPreço cheio, oferecer cadastro.
NãoSimCupom exige cadastro: pedir para se cadastrar.
SimNãoPreço de cliente, sem desconto extra.
SimSimPreço de cliente com o desconto do cupom.

Duas condições, quatro combinações. A tabela garante que nenhuma das quatro foi esquecida.

Uma grade de decisão com duas colunas de condição (é cliente, tem cupom) preenchidas com marcas de sim e não em quatro linhas, e uma terceira coluna com a ação de cada linha. Um selo de conferido marca que todas as quatro combinações têm ação definida, sem lacunas.
A tabela de decisão vira checklist: toda combinação preenchida significa nenhum caso esquecido.

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.