← Kembali ke kursus
Pelajaran kursus · C#
Pelajaran 12

Try-catch untuk input salah

Tangkap ketikan rusak agar program tidak mati mendadak.

Pahami konsepnya

Ketik "abc" saat program meminta angka dan int.Parse melempar pengecualian (exception) — sinyal darurat yang menghentikan program seketika dengan pesan merah yang menakutkan. try-catch adalah jaring penyelamatnya: bungkus kode yang berisiko dalam blok try, dan catch menangkap gangguan itu sebelum mematikan program, memberimu kesempatan merespons dengan santun.

Bentuk lengkapnya menangkap tipe yang tepat: FormatException untuk teks yang tak terbaca sebagai angka, OverflowException untuk angka yang terlalu besar. Di dalam catch, cukup sampaikan pesan yang manusiawi ("Angka saja ya") — program tetap hidup dan boleh melanjutkan.

Kombinasi paling ampuh: try-catch di dalam loop baca-ulang. Baca gagal? Tampilkan pesan, loop berputar lagi, pengguna mencoba lagi — baca berhasil? break keluar. Hasilnya input yang divalidasi tanpa program pernah mati, pola yang dipakai setiap aplikasi serius di dunia nyata untuk data yang tak boleh rusak.

Coba contoh kode

int umur;
while (true)
{
    Console.Write("Umurmu (1-120): ");
    try
    {
        umur = int.Parse(Console.ReadLine());
        if (umur >= 1 && umur <= 120) break;
        Console.WriteLine("Di luar rentang wajar, coba lagi.");
    }
    catch (FormatException)
    {
        Console.WriteLine("Itu bukan angka — angka saja ya.");
    }
}

Console.WriteLine($"Tercatat: {umur} tahun.");

Dua lapis pertahanan bekerja bersama: catch menangkap ketikan non-angka, dan pemeriksaan rentang menolak angka yang tak masuk akal — keduanya membuat loop berputar ulang, dan hanya kombinasi sah yang lolos lewat break. Ketik "abc", lalu 500, lalu 17 untuk merasakan ketiganya bekerja.

Versi modern: TryParse

System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.GetCultureInfo("id-ID");
Console.Write("Harga = ");
if (int.TryParse(Console.ReadLine(), out int harga))
{
    Console.WriteLine($"OK, {harga:C0} tercatat.");
}
else
{
    Console.WriteLine("Bukan angka yang valid.");
}

TryParse adalah adik santai Parse: ia tak pernah melempar pengecualian — mengembalikan bool saja, dan hasil konversinya keluar lewat parameter out. if-else biasa cukup menanganinya. Dua gaya ini hidup berdampingan: try-catch untuk melindungi blok besar, TryParse untuk satu pembacaan bersih.

Latihan singkat

Uji: ketik `abc` lalu `60` — setelah pesan peringatan, program harus berakhir mencetak persis `60`.