C#:
Tratamento de erros
Como fazer:
Vamos começar com um bloco try-catch. É como colocar uma rede de segurança sob um equilibrista na corda bamba. Se escorregarem, eles não despencam—são pegos.
using System;
class ExemploTratamentoErro {
static void Main() {
try {
int[] numeros = {1, 2, 3};
Console.WriteLine(numeros[5]); // Ops, índice fora dos limites!
} catch (IndexOutOfRangeException e) {
Console.WriteLine("Erro capturado: " + e.Message);
}
}
}
Saída de exemplo quando as coisas dão errado:
Erro capturado: Índice estava fora dos limites do array.
Agora adicionamos um bloco finally—é o que acontece não importa o quê, como pagar impostos.
try {
// Código potencialmente problemático aqui
} catch (AlgumaExcecaoEspecífica e) {
// Aqui se manuseia aquele erro específico
} finally {
// Este código roda não importa o que aconteça acima
Console.WriteLine("Isto sempre roda.");
}
Mergulho Profundo
O tratamento de erros está no C# desde seu nascimento. Com o tempo, ele evoluiu. Antigamente, programadores dependiam de códigos de retorno ou flags globais para sinalizar problemas—desajeitado e propenso a erros.
C# utiliza exceções, uma abordagem mais moderna. Uma exceção é lançada quando o inesperado acontece, assim como jogar uma bandeira na jogada no futebol. O tratamento estruturado de exceções com os blocos try, catch e finally torna o gerenciamento destes momentos mais claro e limpo do que as antigas verificações de erro.
Alternativas? Claro. Há o UnhandledExceptionEventHandler
para exceções que escapam. Ou em código assíncrono, o tratamento de erros muda um pouco com objetos Task
que carregam as suas próprias exceções.
Detalhes de implementação—semelhantes a letras miúdas—importam. Exceções podem ser custosas, derrubando o desempenho se lançadas à toa. Por isso, as usamos para casos excepcionais, não para controle lógico do dia a dia.