Reraising no Delphi

Quando utilizamos “try except” para tratar nossas exceções, encontramo-nos algumas vezes em uma situação onde teremos um tratamento interno da exceção, e depois um tratamento externo, seja da mesmo exceção, seja um tratamento para qualquer exceção que o sistema apresente.

Vamos imaginar, por exemplo, que precisamos tratar uma exceção internamente, mas gostaríamos de gerar o log de qualquer exceção que ocorra na aplicação. Se tratarmos as exceções internas, o tratamento da exceção externa que gera o log jamais será executado. Poderíamos duplicar a exceção e gerar uma nova exceção depois de tratarmos a primeira, mas o Delphi possui um recurso próprio para isso, chamado reraising. Ao invés de criar uma nova exceção, o Delphi irá rechamar a última exceção ocorrida, melhorando inclusive a performance, porque ele não cria novamente a exceção, apenas utiliza aquela que já foi gerada:

O método GerarLog é meramente figurativo, para simbolizar que um log estará sendo gerado. O importante no código àcima é a chamada de “raise” sem nenhum parâmetro adicional. Quando isso acontece, o compilador entende que deve ser chamada a última exceção gerada anteriormente.

Execute o código acima e depois execute-o sem a chamada de raise, e perceba a diferença. Utilizando o “reraising“, você possui um poder maior no controle do fluxo da sua aplicação.