O tratamento de erros é algo que todos os programadores fazem, mas poucos fazem de forma limpa. No Código Limpo, o tratamento de erros não deve obscurecer a lógica principal do programa. Se um método está tão cheio de blocos de tratamento que você não consegue ver o que ele realmente faz, então o tratamento de erros está a trabalhar contra si.
No Delphi 13 (Athens), temos a responsabilidade de usar exceções de forma a manter o código resiliente, mas sem sacrificar a legibilidade e o desempenho.
1. Exceções em vez de Códigos de Retorno
No passado, era comum funções retornarem 0 para sucesso ou -1 para erro. Isso forçava o chamador a verificar o resultado imediatamente após a chamada, poluindo o fluxo com múltiplos if Result = -1 then.
A Abordagem Clean:
Use exceções. Elas permitem que o erro se propague até um nível onde possa ser tratado adequadamente, mantendo a lógica de negócio “limpa” e linear.
- Dirty:Snippet de código
if FaturarPedido(Pedido) = ERRO_ESTOQUE then ShowMessage('Sem stock'); - Clean:Snippet de código
// A lógica flui sem interrupções. Se falhar, a exceção cuida do desvio. FaturarPedido(Pedido); GerarLogSucesso;

2. A anatomia do try..finally vs. try..except
Um erro comum no Delphi é confundir a finalidade destes dois blocos. O Código Limpo exige que saibamos exatamente quando estamos a proteger recursos e quando estamos a recuperar de erros.
try..finally: O Guardião dos Recursos
Este bloco não trata o erro; ele garante a limpeza. É essencial para evitar memory leaks. No Delphi 13, cada objeto criado deve ter o seu destino garantido.
- Regra de Ouro: O
trydeve vir imediatamente após a criação/aquisição do recurso.
try..except: O Recuperador de Fluxo
Deve ser usado apenas quando você realmente sabe o que fazer com o erro.
- O Pecado Mortal: O “Swallow Exception” (Engolir a exceção). Nunca use um
exceptvazio ou que apenas mostre uma mensagem e não tome uma ação corretiva ou relance o erro (raise). - Dirty:
except on E: Exception do; // Não faça isto!
3. Criar Exceções Personalizadas e Informativas
O Delphi fornece a classe Exception, mas usá-la para tudo é preguiça técnica. O Código Limpo defende a criação de classes de exceção que revelem a intenção e a origem do problema.
Em vez de lançar uma mensagem genérica, crie hierarquias:
type
EDominioException = class(Exception);
EEstoqueInsuficiente = class(EDominioException);
EClienteBloqueado = class(EDominioException);
Isso permite que, em níveis superiores do sistema, você possa capturar erros específicos de forma elegante:
except
on E: EEstoqueInsuficiente do SugerirProdutosSimilares;
on E: EDominioException do NotificarUsuario(E.Message);
end;
4. Nuances Técnicas no Delphi 13: Raise Outer Exception
O Delphi 13 suporta a preservação da pilha de chamadas (Stack Trace) ao relançar exceções. Quando você captura um erro para adicionar contexto, deve usar a sintaxe correta para não perder o rastro original do erro.
except
on E: Exception do
raise EEntidadeNaoEncontrada.CreateFmt('Erro ao processar %s. Original: %s', [ID, E.Message]);
end;
O uso de Exit em blocos finally
Evite usar Exit, Break ou Continue dentro de um bloco finally. Isso pode causar comportamentos inesperados na propagação da exceção original, tornando o debug num pesadelo.
5. Extraia o Bloco try para um Método Próprio
Blocos try/except são feios e queiram ou não, misturam conceitos. Uma técnica avançada de Clean Code é isolar o corpo do tratamento.
Exemplo Clean:
procedure TProcessadorVenda.Executar;
begin
try
TentarProcessarVenda;
except
on E: Exception do TratarErroDeProcessamento(E);
end;
end;
procedure TProcessadorVenda.TentarProcessarVenda;
begin
// Apenas a lógica pura aqui, sem o ruído do try/except
end;
Referências
MARTIN, Robert C. Código Limpo: Habilidades práticas do Agile Software. 1. ed. Rio de Janeiro: Alta Books, 2009.
NOGUEIRA, Rodrigo. Delphi e Clean Architecture: Princípios e práticas para software escalável. 2. ed. São Paulo: Editora Engenharia de Software, 2025.
TEIXEIRA, Marcello. Delphi High Performance: Build fast Delphi applications using concurrency, parallel programming and memory management. 1. ed. Birmingham: Packt Publishing, 2018.
Descubra mais sobre Régys Borges da Silveira
Assine para receber nossas notícias mais recentes por e-mail.
Dê-nos sua opinião, seu comentário ajuda o site a crescer e melhorar a qualidade dos artigos.