Capítulo 13: Tratamento de Exceções 🤠💎
Neste capítulo, vamos aprender a lidar com erros inesperados (erros em tempo de execução) usando os blocos try e catch do C#, com o tema Indiana Jones!
📖 O que são Exceções?
Uma exceção é um erro que acontece enquanto o programa está rodando (ex: tentar dividir por zero ou ler um arquivo que não existe). Se não tratarmos a exceção, o programa “crasha” e fecha sozinho!
No C#, usamos:
try: Onde colocamos o código que pode dar erro.catch: Onde capturamos o erro e decidimos o que fazer.
📖 Exemplo Guiado: Em busca do Santo Graal
Vamos criar um código que simula a busca por um tesouro usando um ID. Se o ID for inválido, vamos gerar (lançar) uma exceção!
- Crie o arquivo
busca_tesouro.csna pastasrc/:
using System;
string BuscarTesouro(int id) {
if (id != 7) {
// Lançando uma exceção manualmente!
throw new Exception("Apenas poeira encontrada. Armadilha ativada!");
}
return "Santo Graal";
}
try {
Console.WriteLine("Indiana Jones tenta pegar o calice...");
string tesouro = BuscarTesouro(5); // Isso vai dar erro!
Console.WriteLine($"Sucesso! Ele encontrou o {tesouro}");
}
catch (Exception e) {
// Captura o erro e exibe a mensagem
Console.WriteLine($"Erro: {e.Message}");
Console.WriteLine("Indiana Jones rolou para fugir da pedra gigante!");
}🕹️ Como Executar e Testar no VS Code
- Execute o projeto usando
dotnet run.
Resultado Esperado:
Indiana Jones tenta pegar o calice...
Erro: Apenas poeira encontrada. Armadilha ativada!
Indiana Jones rolou para fugir da pedra gigante!📊 Ilustração Visual: Fluxo do Try-Catch
Veja como o erro é desviado:
graph TD A[Código no Try] -->|Aconteceu um Erro| B[Bloco Catch] A -->|Tudo Certo| C[Continua o programa] B --> C
🛠️ Prática Obrigatória 1: Desarmando Armadilhas
Crie uma função chamada DesarmarArmadilha(int codigo). Se o código for 1234, exiba “Armadilha desarmada!“. Se for qualquer outro número, lance uma exceção com a mensagem “CABUM! A armadilha disparou!“. Use try/catch na main para testar o código correto e o incorreto!
🔑 Gabarito de Código
Prática 1: armadilha_excecao.cs
using System;
void DesarmarArmadilha(int codigo) {
if (codigo != 1234) {
throw new Exception("CABUM! A armadilha disparou!");
}
Console.WriteLine("Armadilha desarmada!");
}
try {
DesarmarArmadilha(9999); // Vai falhar
}
catch (Exception e) {
Console.WriteLine($"Alerta: {e.Message}");
}
try {
DesarmarArmadilha(1234); // Vai dar certo
}
catch (Exception e) {
Console.WriteLine($"Alerta: {e.Message}");
}