Introdução
Qualquer um que já foi um simples usuário de software já se deparou com uma mensagem de erro na sua frente, alguns softwares tem mensagens que só ajudam o desenvolvedor, alguns só o usuário e outros tem mensagens que não ajudão em nada! O tratamento de erros consiste em interceptar esses erros a fim de que o programa não aborte inesperadamente e informe ao usuário o que está errado. Meu objetivo é dar uma base de como tratar esses erros no C# e vou tentar usar uma linguagem simples para quem não é muito habituado com programação.Usando Try, Catch e Finally
No .NET esses erros são chamados exceções (ou exceptions) e são tratados com as instruções try, catch e finally. Para tratar as exceções definimos um bloco do código que o .NET irá "tentar" (try) executar, se algo der errado ele vai executar o que estiver num bloco especifico(catch) que contem o que fazer numa situação dessas. Nesse bloco normalmente agente dispara alguma mensagem do tipo "O comando não pode ser executado", que alias é um exemplo de mensagem que não ajuda em muita coisa mas serve por enquanto. Também é possível criar um bloco que será executado dando erro ou não (finally).Resumindo:
try - Define o bloco que contem a execução normal do código;
catch - Define o bloco com o código que será executado caso ocorra alguma exceção no bloco try. Digamos que esse é o tratamento dos erros em si.
finally (opcional) - Define o bloco que será executado independente de haver exceções ou não!
Na prática
Abaixo tem o código de um botão de um form qualquer que tem por objetivo calcular a área de um triangulo, para isso digamos que o form tem dois textbox um chamado txtBase e outro chamado txtAltura para recolher essas informações.int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
O código acima funciona perfeitamente mas não prevê erros. Se por acaso clicarmos no botão com o campo vazio ou letras no lugar de números o programa vai exibir uma mensagem padrão do .NET indicando que ocorreu uma exceção e interrompe o método do botão.Agora veja o código com tratamento de erro simples. Nesse caso, se ocorrer algo errado ele exibe a mensagem "Por favor informe corretamente a base e a altura" no lugar da mensagem de erro padrão do .NET.
try{ // Tenta executar esse bloco de código
int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
}
catch{ // Em caso de erro, executa esse bloco no lugar da mensagem padrão do .NET
MessageBox.Show("Por favor informe corretamente a base e a altura");
}
Exemplo de finally
Vamos imaginar que a gente queira limpar o conteúdo dos textbox mesmo se der erro, basta adicionar um bloco finally com o código correspondente, assim:
try{ // Tenta executar esse bloco de código
int Base = Int32.Parse(txtBase.Text);
int Altura = Int32.Parse(txtAltura.Text);
int Area = Base * Altura / 2;
MessageBox.Show("Área = " + Area);
}
catch{ // Em caso de erro, executa esse bloco no lugar da mensagem padrão do .NET
MessageBox.Show("Por favor informe corretamente a base e a altura");
}
finally{ // Esse sempre será executado
txtBase.Clear();
txtAltura.Clear();
}
É isso por enquanto, deixem sua opiniões! ;)
Fonte de consulta: Desenvolvendo com C# - Fabio Galuppo, Vanclei Matheus, Wallace Santos - Ed. Bookman
14 comments:
eh issu ai uso linguagem simples e ta certinho!!
flw
Muito bom, continue assim e seu blog vai se tornar uma otima fonte de informações ... xD
Muito bom, explicou curto e grosso sem ficar enrolando ou mostrando exemplos complexos, explicação de facil entedimento, parabens!
obrigado mesmo, ajudou imenso num trabalho!
isso ai cara, ajudou bastante.
Valeu pessoal! Que bom que ajudei!
Hoje meu blog está menos tecnico mas eu estou planejando outro para tratar desses assuntos!
muito bom!! é disso que nos iniciantes precisamos... continue preciso e eficaz. Zinabre MMAVALETUDO
Obrigado Vini
Me ajudou muito essa informação!
Olá, estava mesmo procurando um artigo como este para esclarecer algumas dúvidas sobre os tratamentos de erro. O seu artigo está ótimo.
Parabéns!
great share, great article, very usefull for me...thank
you
Estou quebrando a cabeça aqui tentando utilizar try catch nesse trecho de código:
for (int i = 0; i < 1000; i++)
{
r = rand.Next(0, 1000);
try
{
Console.Write(myarray[i] + ", ");
myarray.RemoveAt(i);
}
catch (IndexOutOfRangeException)
{
Console.Write("[e " + r + "]");
}
}
Sendo que é esperado dar indice errado, mas ele trata como unhandled a exceção IndexOutOfRangeException. Alguém tem alguma idéia?
Bom tópico, bem explicado e sem redundâncias, grato.
Bom tópico, Parabéns, muito bem explicado.
Postar um comentário