Criação de objetos sempre fora da estrutura TRY

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:

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.