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.