Mekanisme try-catch terasa sederhana setelah sebelas bab, tetapi penanganan yang keliru justru menyembunyikan masalah: kegagalan tertelan tanpa jejak, atau semua exception diperlakukan sama. Bagian ini merangkum praktik yang disarankan industri, lalu menunjukkannya dalam satu contoh yang memakai mekanisme dari bab-bab sebelumnya.
Praktik yang Disarankan #
- Tangkap tipe paling spesifik yang diketahui.
catch (FormatException)memberi reaksi yang tepat;catch (Exception)menelan semua kegagalan tanpa kecuali. - Tulis pesan yang menjelaskan penyebab. Pesan
Nilai stok 'enam puluh' bukan angka yang validjauh lebih berguna daripada pesanGalat terjadi. - Jangan biarkan blok catch kosong. Kejadian yang tidak dicatat tidak akan pernah bisa diperbaiki.
- Jangan jadikan exception alur normal. Kondisi yang dapat diantisipasi — input pengguna, format teks — lebih baik dicegah lewat
TryParseatau pemeriksaan syarat. - Gunakan
throw;untuk rethrow agar call stack tetap utuh, dan bungkus exception bila butuh konteks baru (lihat bab Exception InnerException).
Contoh Penerapan #
Contoh berikut memadukan pencegahan (TryParse), pelaporan yang jelas (throw dengan pesan deskriptif), dan penanganan spesifik:
csharp
try
{
int stok = BacaStok("enam puluh");
Console.WriteLine($"Stok terbaca: {stok}");
}
catch (FormatException ex)
{
Console.WriteLine($"Data perlu diperbaiki: {ex.Message}");
}
Console.WriteLine("Program tetap berjalan");
static int BacaStok(string teks)
{
if (int.TryParse(teks, out int hasil))
{
return hasil;
}
throw new FormatException($"Nilai stok '{teks}' bukan angka yang valid");
}Output yang Dihasilkan:
text
Data perlu diperbaiki: Nilai stok 'enam puluh' bukan angka yang valid
Program tetap berjalanMari kita telaah baris demi baris:
- Baris 13-16 (method
BacaStok): Method memakaiint.TryParsesebagai gerbang: nilai yang valid langsung dikembalikan tanpa exception sama sekali — kegagalan yang bisa dicegah memang sebaiknya dicegah. - Baris 18 (
throw new FormatException(...)): Bila nilai tetap tidak valid, exception dilempar dengan pesan yang menyebut nilai bermasalahnya; pemanggil menerima informasi yang bisa ditindaklanjuti. - Baris 6-9 (blok catch): Catch menargetkan
FormatExceptionsaja, sehingga kegagalan lain tidak tertelan diam-diam dan akan tetap terlihat. - Baris 11: Statement setelah try-catch dieksekusi, membuktikan program melanjutkan pekerjaannya setelah kegagalan ditangani.
Ringkasan: Lakukan dan Hindari #
| Lakukan | Hindari |
|---|---|
| Menangkap tipe spesifik | Menangkap semua dengan catch (Exception) di semua tempat |
| Pesan yang menyebut penyebab dan data | Pesan generik tanpa detail |
TryParse untuk input pengguna | Mengandalkan Parse plus exception sebagai validasi rutin |
throw; saat rethrow | throw ex; yang memotong call stack |