Estruturas de TRY aninhados
Outra boa prática no momento de codificar é quando o programador precisa garantir que a memória seja liberada corretamente, conforme o esperado, mas que também possa criar um bloco de tratamento de exceções em situações já previstas, para isso usa-se uma estrutura de TRY aninhado, ou seja são estruturas incluídas uma dentro de outra.
Basicamente as estruturas TRY possuem o objetivo de tentar fazer alguma coisa, e caso não resulte fazer outra ação. Exemplo é um erro de divisão por zero, onde ocorre uma exceção com a mensagem Division by zero. O bloco except
só é executado caso ocorra uma exceção.
Por outro lado, o bloco finally
é sempre executado, existindo uma exceção ou não. Caso ocorra uma exceção, o programa salta para o finally
. Caso não ocorra, todo o código será executado e em seguida também irá executar o finally
.
Exemplo onde uso as estruturas encadeadas:
uses
Classes;
var
vVlrEntrada: Real;
vVlrResultado: Real;
vMsg: String;
begin
vMsg:= '';
try
try
vVlrEntrada:= 5;
vMsg:= 'Valor digitado: ' + FloatToStr(vVlrEntrada);
vVlrResultado:= vVlrEntrada div 0;
vMsg := vMsg + #13#10 + 'Resultado: ' + FloatToStr(vVlrResultado);
except
vMsg := vMsg + #13#10 + 'Ocorreu uma exceção';
end;
vMsg := vMsg + #13#10 + 'Restante do código ///';
finally
ShowMessage(vMsg + #13#10 + 'Fim dos blocos try.');
end;
end;
Veja o resultado da mensagem no final:
Valor digitado: 5
Ocorreu uma exceção
Restante do código ///
Fim dos blocos try.