Cursos / Eletrônica / Programação Orientada a Objetos / Aula

arrow_back Aula 10 - Tratamento de Erros

Lançando e Tratando Exceções

Comportamentos inesperados

Quais estratégias devemos utilizar quando um código não se comporta da maneira como deveria? Vejamos abaixo duas estratégias que são comumente utilizadas:

  • booleanos: true ou false informando se ele executou corretamente ou não;
  • Retorna valores, informando se o método executou corretamente ou não.

Mas ao utilizar essas estratégias podemos ter alguns problemas, vamos ver abaixo quais são esses possíveis problemas.

Na figura 2, podemos observar a estratégia de usar booleanos para controlar comportamentos inesperados. Porém, como a figura abaixo destaca, podemos ter dois problemas, o primeiro é que o programador é obrigado a tratar (recuperar) o valor retornado pelo método e o segundo é que, de acordo com o retorno, é possível saber se algo deu certo ou errado, mas se foi errado, não saberá a causa do problema.

Figura 2 - Implementação de Classe

Descrição imagem

Na figura 3, temos o exemplo da segunda estratégia, que é a utilização de valores, onde o comportamento do código dependerá do valor retornado. Vejamos:

Figura 3 - Utilização de valores

Descrição imagem

Nesse caso, além da mesma preocupação que tínhamos com o uso de booleanos, onde o programador é obrigado a tratar (recuperar) o valor retornado pelo método, ainda precisaremos de uma lista ou tabela para entender todos os códigos retornados, dependendo do cenário isso pode tornar-se inviável.

Até esse momento, vimos exemplos em que o programador tem controle total sobre o comportamento do seu código, porém existem situações onde isso não é possível, como, por exemplo, tentar acessar um arquivo que foi excluído ou até mesmo problemas de acesso a um servidor, que pode ter diversos motivos. Outros erros também podem ocorrer durante o desenvolvimento, como por exemplo: acesso à variável que não foi declarada ou erro de tipo. Para ter melhor controle e tratamento de situações como essas, vamos utilizar o tratamento de exceções.

Tratamento de exceções

É necessário o tratamento de exceções em situações que podem gerar comportamentos inesperados. O tratamento deve ser feito por um código diferente do código executado quando não ocorre a exceção.

  • Exceções podem ser tratadas através do uso do bloco try/catch;
  • Determinado código tenta (try) executar um código e, caso alguma exceção aconteça, ele pega (catch) a exceção e trata;
  • Após uma exceção ter alcançado o bloco catch, o código volta o seu fluxo normal de execução.

Veja na figura 4 um código que irá gerar um erro (exceção):

Figura 4 - Exemplo: erro variável não definida

Descrição imagem

Na linha 133 a IDE já avisa que um erro poderá ocorrer na variável y, mas, para finalidade didática, vamos executar esse código e verificar o que ocorrerá. A figura 5 apresenta a saída do console após executar o código da figura 4.

Figura 5 - Exemplo: erro variável não definida

Descrição imagem

Podemos observar na figura acima que um erro é gerado e uma exceção é lançada no console, parando a execução do código. Percebemos isso pois a mensagem continuando nosso código da linha 35 não é exibida no console. É possível também verificar na mensagem do console o tipo de erro: ReferenceError: y is not defined, informando que a variável ynão foi definida.

Esse comportamento não pode ser permitido, a aplicação não pode parar e o erro não pode ser lançado para o usuário. Veremos abaixo a forma de tratar esse problema com o uso do bloco try-catch.

Figura 6 - Bloco: try-catch

Descrição imagem

Na figura 6, podemos observar que, na linha 126 a IDE avisa que um erro pode ocorrer na variável y, porém colocamos essa parte do código dentro do try, onde ele tentará executar e, caso ocorra um erro, o bloco catchpegará esse erro. Em nosso exemplo para fins didáticos, o tipo do erro é apresentado no console, mas dentro do bloco catch poderia ocorrer qualquer tipo de tratamento para o erro lançado.

Vejamos na figura 7 a saída desse código no console:

Figura 7 - Console após tratamento

Descrição imagem

O mais importante é, mesmo com o erro, o bloco catch tratou apresentando a mensagem: Tratamento de erro: y is not defined e a execução do código não parou, nota-se isso pois a mensagem Continuando nosso código foi apresentada no console.

Lançamento de exceções

Chegamos ao momento especial em relação ao tratamento de exceções. Até agora estávamos preocupados em tratar as exceções que poderiam acontecer, tentando contornar a situação utilizando o bloco try/catch. Mas, agora é a nossa vez de lançarmos as exceções, vamos ver como lançá-las!

Vejamos a figura 8:

Figura 8 - Lançamento de exceção

Descrição imagem

Nessa caso, lançamos uma exceção quando o ano de nascimento é menor que 1900, para isso utilizamos a palavra reservada throw para lançar a exceção e a classe Error, que é disponibilizada pelo TypeScript, para customizar a mensagem. O uso da classe Error possibilita customizar as mensagens para diferentes situações em nosso programa.

Na aula prática sobre exceções, você vai aprender como criar exceções customizadas.


Versão 5.3 - Todos os Direitos reservados