A estrutura do TRY é realmente muito útil na codificação dos códigos do VsScripter, mas sempre deve-se tomar cuidado com as implementações.
Outra boa prática usando o TRY é sempre manter as criações de objetos fora da estrutura, veja o exemplo abaixo de como não fazer e o porque disto:
Code Block | ||
---|---|---|
| ||
uses
Classes; // unit que tem a definição da classe TStringList
var
str : TStringList; //declaração da variável
begin
//Forma de codificação correta
//str := TStringList.Create; // criação do objeto
try
//Criando o objeto dentro da estrura TRY. Forma de codificação errada
str := TStringList.Create; // criação do objeto
str.add('Testando'); //utilização do objeto
str.add(' ciclo de vida');
str.add(' de objetos no script.');
ShowMessage(str.Text);
finally
str.free; //destruição/eliminação do objeto
end;
end; |
Supondo que ocorra algum erro na criação deste objeto (linha 9), e isso pode acontecer por diversos motivos, o sistema irá gerar um erro para o usuário na tela. Então, após o usuário clicar em OK nesta mensagem de erro o sistema irá gerar outro erro, mas é devido à linha 15, que é a limpeza da memória que está dentro da cláusula FINALLY, e isso irá ocorrer porque o objeto STR não existe, então automaticamente não conseguirá realizar a limpeza/liberação da memória, e um erro de ACCESS VIOLATION aparecerá para o usuário final.