Catalog · How the catalog works
Guard-Clauses-vs-Codigo-Aninhado
Exemplo de uso de Guard clause
- ★ 1 on GitHub
Anyone may press Interesting, signed in or not. It helps others find this project.
README
Guard Clauses vs Código Aninhado
Exemplo prático em Delphi/VCL mostrando por que guard clauses evitam bugs que código aninhado (if dentro de if dentro de for) esconde.
O problema
// ❌ Parece inofensivo, mas Exit aqui sai do PROCEDIMENTO, não do loop
procedure Processar;
begin
for lItem in FLista do
begin
if lItem.Ativo then
begin
ProcessarItem(lItem);
Exit; // só o primeiro item ativo é processado
end;
end;
end;// ✅ Guard clause: intenção clara, processa todos os itens ativos
procedure Processar;
begin
for lItem in FLista do
begin
if not lItem.Ativo then
Continue;
ProcessarItem(lItem);
end;
end;Estrutura do projeto
- uPrincipal.pas — form com os três cenários de demonstração:
ProcessarAninhado— versão com o bug doExitdentro do loopProcessarGuardClause— versão corrigida comContinueSalvar— guard clauses validando umTCliente(nil / código inválido) antes da lógica principal
- uModelos.pas — tipos de apoio (
TItemDemo,TCliente) - GuardClauses.dpr — projeto Delphi
Como rodar
Abra GuardClauses.dproj no Delphi/RAD Studio, compile e rode. A tela tem três botões:
- Aninhado — roda
ProcessarAninhadoe mostra no memo que só o primeiro item ativo foi processado - Guard Clause — roda
ProcessarGuardClausee mostra todos os itens ativos processados - Salvar — testa as guard clauses de
Salvarcom clientenil, código0e dados válidos

