Do que trata o artigo

O artigo trata de um assunto por muitas vezes ignorado pela maioria dos desenvolvedores, o tratamento de exceção. Vamos entender o processo de compilação, pilha de processamento e por fim o que são as exceções e onde elas se enquadram no contexto da execução de um programa para que assim possamos implementar um tratamento e proteção de recursos eficiente.


Para que serve

O tratamento de exceção serve para tornar as aplicações mais tolerantes a falhas, não significa dizer que sua aplicação estará isenta de erros, mas sim que ela estará preparada para lidar com possíveis erros, seja garantindo a integridade dos dados, gerando logs, notificando usuários ou tomando outra atitude que evite o travamento da aplicação.


Em que situação o tema é útil

A implementação de uma rotina para tratar exceções é útil quando se quer garantir que procedimentos da sua aplicação sejam executados em sua totalidade, e quando por algum motivo isso não for possível que a pilha de processamento não seja interrompida ocasionando o travamento da aplicação.

Resumo do DevMan

Neste artigo vamos entender o que são exceções e como elas são encaradas pelo Delphi. O objetivo principal é mostrar a você que com atitudes simples podemos reduzir consideravelmente aquelas mensagens incômodas de erros que tiram qualquer usuário do sério. Vamos desenvolver um exemplo mostrando algumas técnicas interessantes de tratamento de exceções, tais como rotinas para extrair informações dos erros e nos auxiliar na manutenção dos nossos sistemas permitindo-nos aprimorá-los, tornando-os cada vez mais tolerantes a falhas.

Quem nunca recebeu a mensagem “Esta aplicação executou uma operação ilegal e será finalizada” que atire a primeira pedra. As exceções não tratadas e aplicações vulneráveis a elas não são privilégio de programadores amadores, pelo contrário, temos hoje no mercado aplicativos de nome que por vezes nos tiram do sério. Mas o que vem a ser estas exceções? Antes de responder esta pergunta temos primeiro que entender como funciona uma aplicação nos bastidores.

Em sua maioria, os aplicativos que rodam no Windows possuem a extensão .exe, são os famosos arquivos executáveis, o principal responsável por fazer acontecer. Basicamente para produzir um executável você precisa apenas de um compilador. O papel do compilador é traduzir algo escrito em uma linguagem digamos humana para a linguagem que o computador, ou melhor, o processador consiga entender: zero e um. Este processo é chamado de compilação.

Imagine que você queira fazer um pequeno aplicativo que fornecida uma idade informe se a pessoa é menor. Seria muito bom se pudéssemos passar a seguinte instrução para o processador: Processador se eu lhe passar um valor e este valor for menor do que 18 por gentileza envie o texto “É menor de idade” para o monitor. O processador não “fala” português, ele entende apenas zero e um, então precisamos de um compilador que possa converter, ou melhor, traduzir o texto acima para zero e um. Bem eu não conheço um que converta texto em português para o que chamamos de linguagem de máquina, mas temos o Delphi, que possui um compilador para a linguagem Delphi. Desta forma a mensagem acima ficaria mais ou menos assim:


  If Idade < 18 then
    ShowMessage(‘É menor de idade’); 

Isso é suficiente para que o compilador do Delphi entenda e traduza isso em linguagem de máquina para que o processador possa entender essa instrução. No Delphi isso é feito apenas pressionando as teclas Ctrl+F9, porém uma série de tarefas são executadas até que o produto final, o executável, seja criado. Feito isso temos nossa aplicação pronta para ser usada e ao darmos um duplo clique no executável podemos usufruir o benefício de saber, dada a idade de uma pessoa, se a mesma é menor de idade. Falando assim o processo de compilação parece simples, mas há fases pelas quais o código passa até chegarmos ao produto final. O processo de compilação é composto de análise e síntese. A análise tem como objetivo entender o código fonte e representá-lo em uma estrutura intermediária. A síntese constrói o código objeto a partir desta representação intermediária. A Figura 1 ilustra de forma resumida o processo de compilação.

processo de compilação
Figura 1. Processo de compilação

Nota do DevMan

A análise pode ser subdividida ainda em análise léxica, análise sintática e análise semântica. A síntese é mais variada, podendo ser composta pelas etapas de geração de código intermediário, otimização de código e geração de código final (ou código de máquina), e somente esta última etapa é obrigatória. Classicamente, um compilador traduz um programa de uma linguagem textual facilmente entendida por um ser humano para uma linguagem de máquina, específica para um processador e sistema operacional. Atualmente, porém, são comuns compiladores que geram código para uma máquina virtual que é, depois, interpretada por um interpretador.
...

Quer ler esse conteúdo completo? Tenha acesso completo