Sign in Join

Live chat for Free Pascal, Lazarus, Delphi and every Pascal programmer.

Catalog · How the catalog works

Random project

Guard-Clauses-vs-Codigo-Aninhado

Exemplo de uso de Guard clause

View on GitHub

Anyone may press Interesting, signed in or not. It helps others find this project.

Member rating

No ratings yet.

Sign in to rate 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

delphi
// ❌ 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;
delphi
// ✅ 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 do Exit dentro do loop
    • ProcessarGuardClause — versão corrigida com Continue
    • Salvar — guard clauses validando um TCliente (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 ProcessarAninhado e mostra no memo que só o primeiro item ativo foi processado
  • Guard Clause — roda ProcessarGuardClause e mostra todos os itens ativos processados
  • Salvar — testa as guard clauses de Salvar com cliente nil, código 0 e dados válidos