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 valid jauh lebih berguna daripada pesan Galat 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 TryParse atau 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 berjalan

Mari kita telaah baris demi baris:

  1. Baris 13-16 (method BacaStok): Method memakai int.TryParse sebagai gerbang: nilai yang valid langsung dikembalikan tanpa exception sama sekali — kegagalan yang bisa dicegah memang sebaiknya dicegah.
  2. Baris 18 (throw new FormatException(...)): Bila nilai tetap tidak valid, exception dilempar dengan pesan yang menyebut nilai bermasalahnya; pemanggil menerima informasi yang bisa ditindaklanjuti.
  3. Baris 6-9 (blok catch): Catch menargetkan FormatException saja, sehingga kegagalan lain tidak tertelan diam-diam dan akan tetap terlihat.
  4. Baris 11: Statement setelah try-catch dieksekusi, membuktikan program melanjutkan pekerjaannya setelah kegagalan ditangani.

Ringkasan: Lakukan dan Hindari #

LakukanHindari
Menangkap tipe spesifikMenangkap semua dengan catch (Exception) di semua tempat
Pesan yang menyebut penyebab dan dataPesan generik tanpa detail
TryParse untuk input penggunaMengandalkan Parse plus exception sebagai validasi rutin
throw; saat rethrowthrow ex; yang memotong call stack