Manuseio de Exceções

Atualmente fala-se muito sobre tratamento de exceções no desenvolvimento de software em geral, independente da linguagem de programação. Estes tratamentos são extremamente úteis para controlar o fluxo de execução do aplicativo ou do script que está sendo ou foi desenvolvido e tratar quando algum erro ocorre, bem como servir como um bom recurso de rastreabilidade.

Porém, em muitos casos, os tratamentos de exceções não são elaborados e utilizados como supostamente deveriam ser.

Nesta documentação algumas premissas relacionadas à exceções no código e algumas dicas para empregar o tratamento.

 

1 - Escreva o esqueleto do bloco antes de codificar

Quando iniciar um bloco de tratamento de exceções, escreva toda a estrutura do tratamento antes de continuar a codificação. Essa dica é ainda mais importante para instruções finally, já que nos impede de esquecer de liberar um objeto da memória.

Por exemplo, caso seja necessário instanciar um objeto em um método, a estrutura pode ser escrita dessa forma:

uses Classes, System, SysUtils; var   Objeto: TStringList; begin   Objeto := TStringList.Create;   try    Objeto.Add('Documentação boas práticas de codificação'); finally   Objeto.Free;  end; end;

 

Somente depois de escrever essa estrutura que a codificação dentro do try deve ser iniciada. Da mesma forma, se um objeto da classe estiver sendo instanciado no evento OnCreate de um formulário, o código para destruí-lo deve ser imediatamente escrito no evento OnDestroy. Se isso não for feito, haverá Memory Leaks na aplicação, comprometendo o desempenho e aumentando a probabilidade de erros consecutivos, também conhecidos como “efeito cascata”.

 

2 - Use o except exclusivamente para tratamento de exceções

É preciso entender que o except não deve ser empregado como uma condição If. Alguns desenvolvedores pensam da seguinte forma: “Vou tentar executar o plano A (try), e se não der certo, executo o plano B (except)". Isso não existe.

O tratamento de exceções, como o próprio nome diz, deve ser utilizado apenas para exceções, e não para regras de negócio. Como exemplo, considere o código:

try   ConsultarPorCodigo; except   ConsultarPorDescricao; end;

 

O bloco try/except está sendo incorretamente utilizado como uma condição para atender uma funcionalidade. Este código deve ser imediatamente corrigido com uma condição If dispensando assim o except de tratar regras de negócio:

var vTipoConsulta: String; begin try   if vTipoConsulta = 'Codigo' then     ConsultarPorCodigo   else if vTipoConsulta = 'Descricao' then ConsultarPorDescricao; except   ShowMessage('Erro ao realizar a consulta.'); end; end;

Abaixo outros exemplos de como utilizar isso no VsScripter de maneira correta e algumas dicas mais específicas para cada caso.