Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Palavra reservada "Throw"

Olá, Eu tenho duas duvidas:

  1. Eu vi lançamento de exceções utilizando a palavra reservada "Throw", mas também vi lançamentos no bloco try /catch sem utiliza-la. Quando devo usá-la e de forma mais direta, o que ela faz na execução do programa?

  2. Eu vi lançamentos de exceções dentro de classes especificas e também dentro da classe Program. Há uma regra de onde implementar as exceções ou onde couber posso inserí-las?

2 respostas
solução!

Olá Samantha, Tudo bem?

Nós usamos exceções como o nome diz para informar ao sistema que uma exceção ocorreu, isso é útil quando queremos parar a execução por algum motivo (ex. Parametro inválido, tentativa de acessar um objeto nulo, etc).

A palavra throw é usada para lançar uma exceção, podendo ser usada em dois lugares:

  • No bloco catch para propagar a exceção para a fila de chamada (para o método que chamou o método que lançou a exceção), na esperança que em algum momento ela seja tratada.
  • Em qualquer lugar do código onde seja necessário interromper a execução de um método por um determinado motivo, ( ex. Interromper o cadastro de uma pessoa no sistema se o CPF for inválido).

Embora você tenha visto lançamentos no método Main do Program.cs é importante que seja evitado o lançamento de exceções não tratadas no método main, visto que isso irá acarretar no encerramento da aplicação por um erro.

O que algumas aplicações fazem em alguns casos é capturar a exceção que chega até o main por algum motivo, construir um relatório de erros que pode ser enviado ao desenvolvedor no momento em que a aplicação tem esta exceção capturada no Main ou persistir a informação do erro em um arquivo para enviar ao desenvolvedor na próxima execução.

No meu dia a dia eu monto meus programas para lançarem exceções sempre que um método é usado de forma não planejada, a maioria das exceções que eu pessoalmente lanço normalmente estão relacionadas a Argumentos Inválidos ou erros em aplicações de terceiros (ex. Não receber a confirmação de recebimento da Nota Fiscal do servidor da prefeitura). e normalmente eu capturo estes erros para exibir uma mensagem ao usuário informando que a operação deu errado, o motivo pelo qual ela deu errado e o que o usuário pode fazer para conseguir alcançar seu objetivo.

Por exemplo, no caso do servidor da prefeitura eu tenho uma mensagem do tipo:

Não foi possível enviar a nota fiscal, o servidor da prefeitura não está respondendo no momento, por gentileza, tente realizar o envio mais tarde.

Nem sempre o uso é para retornar mensagens em interfaces. No mesmo sistema temos a função de gerar e enviar lotes de notas fiscais (que são enviadas individualmente), neste caso quando capturamos uma exceção de demora na resposta da prefeitura nós pausamos a execução por 30 segundos antes de tentar novamente, caso seja outro erro, por exemplo, um erro no valor da aliquota que tenha mudado e que não tenha sido atualizado a aplicação para a fila de envios e envia um e-mail para um profissional atualizar a aliquota.

De via de regra você provavelmente irá usar quando sentir a necessidade de parar ou evitar alguma execução, dependendo de onde ou o que estiver escrevendo talvez nem seja você que venha capturar a exceção, se estiver escrevendo um SDK para uma integração por exemplo, provavelmente quem irá capturar a exceção será o desenvolvedor que estiver usando seu SDK.

Muito obrigada Rafael pela resposta. Você deu uma aula excelente na explicação ainda mais com exemplo das notas as quais já trabalhei também. Muito obrigada!!!!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software