Input pengguna tidak pernah dapat diprediksi sepenuhnya: satu pengguna mengetik 120000, pengguna lain mengetik dua juta. Program yang baik mengantisipasi kedua kemungkinan. Blok try-catch adalah alat utama untuk itu: try menandai area percobaan, dan catch menampung kegagalan agar program tetap berjalan.
Anatomi try dan catch #
Blok try berisi statement yang berpotensi melempar exception. Blok catch hanya dieksekusi bila exception dengan tipe yang cocok terjadi di dalam try. Ketika exception terlempar, runtime langsung berpindah ke blok catch; sisa statement di blok try tidak dijalankan. Setelah blok catch selesai, eksekusi melanjutkan statement berikutnya di luar pasangan try-catch.
string[] inputPengguna = { "120000", "dua juta" };
foreach (string input in inputPengguna)
{
try
{
int harga = int.Parse(input);
Console.WriteLine($"Harga valid: {harga}");
}
catch (FormatException)
{
Console.WriteLine($"'{input}' bukan angka yang valid");
}
}Output yang Dihasilkan:
Harga valid: 120000
'dua juta' bukan angka yang validMari kita telaah baris demi baris:
- Baris 1: Array menyimpan dua input untuk diuji berurutan — satu valid, satu tidak.
- Baris 3-12 (foreach): Setiap input melewati pasangan try-catch yang sama; percobaan pertama dan kedua saling bebas.
- Baris 5-8: Untuk
"120000",int.Parseberhasil; blok catch dilewati sepenuhnya dan output mencetakHarga valid: 120000. - Baris 9-12: Untuk
"dua juta",int.ParsemelemparFormatException; runtime berpindah ke catch dan mencetak pesan bantu beserta nilai input yang bermasalah.
Perhatikan bahwa program tidak berhenti setelah input kedua gagal: loop selesai secara normal. Inilah perbedaan mendasar dengan bab Konsep Exception, di mana exception tanpa penanganan menghentikan program.
Menangkap Objek atau Hanya Tipenya #
Blok catch dapat mengikat objek exception ke variabel (catch (FormatException ex)) ketika pesan atau properti lainnya dibutuhkan, atau hanya menyebut tipenya (catch (FormatException)) ketika program hanya perlu bereaksi. Jangan mengikat variabel yang tidak dipakai; compiler menandainya sebagai peringatan pemborosan.