Fala pessoal.
Hoje venho trazer um tema um pouco menos explorado pelos que tem menos experiência em desenvolvimento.
O tratamento de exceções nos permite prever erros que o sistema pode ter e manipular esses erros através das exceções que nada mais são do que as mensagens do sistema.
O try…
O try é o bloco de código para escopo normal. As linhas de código que você simplesmente colocaria dentro do método, passam a ficar dentro do bloco de try onde será executado uma tentativa normal.
Ex.:
Sem o uso do bloco try…
public void testeMetodo(string teste)
{
Response.Write((Convert.ToInt32(teste))+1);
}
Com o uso do bloco try…
public void testeMetodo(string teste)
{
try
{
Response.Write((Convert.ToInt32(teste))+1);
}
catch{}
}
O erro que pode ser gerado é na conversão. No exemplo acima eu estou convertendo um tipo string para inteiro. Isso só é possivel se o valor contido na variável “teste” seja um número inteiro. Assim o framework converte o valor de string para inteiro. Caso contrário é gerada uma exceção e o escopo do programa é direcionado para o bloco catch ao qual iremos falar mais abaixo.
O catch…
O catch é o bloco que trata o erro gerado. Dentro deste bloco pode ser vista a mensagem do erro e feita a manipulação que o desenvolvedor quiser como fechar o programa, retornar algo que identifique o erro ou simplesmente mostrar a mensagem de erro que foi gerada.
Seguindo o Ex.:
Com o uso do bloco catch…
public void testeMetodo(string teste)
{
try
{
Response.Write((Convert.ToInt32(teste))+1);
}
catch (FormatException e)
{
Response.Write(e.Message.ToString());
}
}
No bloco catch mostrado, apenas está sendo mostrada mensagem de erro a qual a exceção gerada mostra. O bloco catch pode ser repetido várias vezes para serem tratados vários tipos de exceção.
Ex.:
Com o uso do bloco catch…
public void testeMetodo(string teste)
{
try
{
Response.Write((Convert.ToInt32(teste))+1);
}
catch (FormatException e)
{
Response.Write(e.Message.ToString());
}
catch (InvalidCastException e)
{
Response.Write(e.Message.ToString());
}
}
Existe ainda um tipo de exceção padrão para todos os erros. Este tipo de exceção é chamada apenas de Exception e é usada da seguinte forma.
Ex.:
Com o uso do bloco catch…
public void testeMetodo(string teste)
{
try
{
Response.Write((Convert.ToInt32(teste))+1);
}
catch (Exception e)
{
Response.Write(e.Message.ToString());
}
}
O finally…
O finally é como nome já diz o bloco de finalização. Este bloco é executado em qualquer circunstancia. Mesmo que o programa gere uma exceção o bloco finally será executado. A idéia é que existe um escopo rodando mesmo que o erro faça o programa parar… Assim é possivel fazer com que você possa matar conexões ou coisas do tipo, para que essas coisas não consumam carga de processamento e memória.
Ex.:
Com o uso do bloco finally…
public void testeMetodo(string teste)
{
string Resp = “”;
try
{
Response.Write((Convert.ToInt32(teste))+1);
Resp = “Funcionou”;
}
catch (Exception e)
{
Response.Write(e.Message.ToString());
Resp = “Erro…”;
}
finally
{
Response.Write(Resp);
}
}
No código mostrado, se o escopo normal for realizado dentro do bloco try, quando ele for executar o finally irá mostrar a mensagem de que funcionou. Caso contrário, quando for executado o catch ele irá mudar o valor para erro e assim quando for executado finally irá ser mostrado esta mensagem na tela.
O throw…
O throw é um complemento aos blocos de código. Ele tem como função explodir uma exceção que pode ou não ser criada pelo usuário.
Ex.:
Com o uso do throw…
public void testeMetodo(string teste)
{
string Resp = “”;
try
{
if (teste == null)
{
throw new ArgumentNullException();
}
Response.Write((Convert.ToInt32(teste))+1);
Resp = “Funcionou”;
}
catch (Exception e)
{
Response.Write(e.Message.ToString());
Resp = “Erro…”;
}
finally
{
Response.Write(Resp);
}
}
No exemplo mostrado é checado se a variável teste está vazia. Caso a mesma esteja vazia é estourada uma exceção de valor NULL, fazendo com que o escopo do programa seja direcionado para o bloco catch.
Bem pessoal, é isso. Aconselho a todos que usem os blocos de tratamento de erros para deixar sua aplicação mais amigável e confiável.
Qualquer tipo de dúvidas é só entrar em contato comigo.
Abraços a todos.