Dicas para a Certificação Delphi Developer #3

Tratamento de exceção (exception handling) é o tema a ser abordado na terceira dica para a Certificação Delphi Developer.

Exceções (exceptions em inglês) são condições que requerem um tratamento especial, o tratamento de exceção fornece uma maneira padrão de lidar com erros, quando utilizado permite que você gerencie os erros quando eles aconteçam e decida o que fazer.

A documentação do RAD Studio tem um tópico específico que trata de Exception Handling, invista algum na leitura deste tópico, lendo este tópico você estará melhor preparado para responder as perguntas sobre este tema durante a prova..

Além disso, você pode pensar que pelo fato de usar try..except..end no seu desenvolvimento diário é suficiente para responder as perguntas da prova, a resposta é NÃO. O programa de certificação tem um banco de dados com muitas perguntas, a prova irá trazer perguntas sobre diferentes aspectos do tratamento de exceção, como: Propagando (Re-raising) exceções, Exceções silenciosas (Silent Exceptions) e mais.

Exceção silenciosa é uma forma de levantar (raise) uma exceção sem mostrar a mensagem de erro, o método padrão para levantar uma exceção mostra a mensagem de erro, mas não é só isso.

  • Todas as exceções silenciosas descendem da exceção padrão EAbort.
  • Delphi tem uma procedure chamada Abort, o qual automaticamente cria e levanta a exception EAbort
Quando o assunto é propagar exceções (re-raising exceptions), a documentação do RAD Studio documentation oferece uma ótima introdução ao tema.

Propagar exceção é muito útil quando uma procedure ou função tem que executar alguma código adicional após a exceção acontecer e não pode gerenciar a exceção totalmente.

Por exemplo, a função GetFileList aloca um objeto TStringList e preenche o mesmo com nomes de arquivo que atenda condição de busca de um diretório específico:

function GetFileList(const Path: string): TStringList;
var
  I: Integer;
  SearchRec: TSearchRec;
begin
  Result := TStringList.Create;
  try
    I := FindFirst(Path, 0, SearchRec);
    while I = 0 do
      begin
          Result.Add(SearchRec.Name);
          I := FindNext(SearchRec);
      end;
  except
      Result.Free;
      raise;
  end;
end;

GetFileList cria um objeto TStringList e então usa as funções FindFirst e FindNext para inicializá-lo. Se a inicialização falhar, por exemplo porque o diretório é inválido ou porque não há memória suficiente para preencher o string list – será necessário que GetFileList se desfaça do novo string list. Por esta razão, a inicialização do string list ocorre em um bloco try…except..statement. Se a exceção ocorrer, a parte do código do except irá destruir o string list e assim propagar a exceção com um raise.

A prova irá além dos aspectos que aqui mencionei. A seguir cinco links que irá lhe ajudar a aprender mais sobre tratamento de exceções:

1 responder

Deixe uma resposta

Want to join the discussion?
Feel free to contribute!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *


This site uses Akismet to reduce spam. Learn how your comment data is processed.