Biar C# nggak gampang error? Yuk, kita kuasai Exception Handling bareng!

Share
Biar C# nggak gampang error? Yuk, kita kuasai Exception Handling bareng!
Photo by Zulfikar Arifuzzaki/Unsplash

Pernah nggak sih kita lagi asik ngoding terus tiba tiba aplikasi crash atau nge freeze dan yang paling parah keluar notifikasi error warna merah yang bikin jengkel Nah kalau sering ngalamin itu berarti kita lagi di tempat yang tepat nih Bareng IDCSharp kita bakal mengupas tuntas gimana caranya bikin kode C# kita lebih tangguh dan nggak gampang ngambek Yuk kita kuasai Exception Handling biar ngoding makin lancar jaya

Kenapa Sih Exception Handling Penting Banget buat Kita

Bayangin deh kita lagi asik main game terus tiba tiba gamenya keluar sendiri tanpa pemberitahuan Apa rasanya Pasti kesel kan Nah hal serupa bisa terjadi kalau aplikasi yang kita bikin nggak punya penanganan error yang baik Ketika ada error yang nggak terduga aplikasinya bisa crash dan itu jelas merusak pengalaman pengguna atau user experience

Exception Handling itu bukan cuma sekadar menghindari crash Ini lebih dari itu Ini tentang membuat aplikasi kita jadi lebih robust stabil dan user friendly Dengan menguasai Exception Handling kita bisa mengantisipasi masalah yang mungkin muncul memberikan pesan error yang informatif ke user bahkan recovery dari masalah tersebut jadi aplikasi kita nggak cuma jalan tapi juga pintar menghadapi rintangan di jalan

Menguasai Try Catch Finally itu asik

Ini dia nih bintang utamanya Exception Handling di C# Ada tiga kata kunci yang wajib banget kita pahami dan kuasai yakni try catch dan finally Kita bahas satu per satu yuk

Blok Try Tugas berat ada di sini

Blok try adalah tempat di mana kita menaruh kode kode yang punya potensi untuk menyebabkan error atau exception Misalnya kita lagi baca file dari disk melakukan koneksi ke database atau mencoba mengkonversi string jadi angka integer Kode kode ini kan punya risiko gagal ya kan Nah kita bungkus semua kode berisiko itu di dalam blok try

csharp
try
{
    // Kode yang punya potensi bikin error ada di sini
    string input = "abc";
    int angka = int.Parse(input); // Ini bisa lempar FormatException
    Console.WriteLine($"Angka yang berhasil dikonversi adalah: {angka}");
}

Tujuannya jelas kalau ada masalah di dalam blok try ini sistem C# kita akan segera 'melempar' sebuah exception

Blok Catch Menangkap si Error bandel

Ketika sebuah exception dilempar dari dalam blok try blok catch adalah pahlawan yang siap menangkapnya Di sinilah kita bisa menuliskan logika untuk menangani error tersebut Jadi alih alih aplikasi kita crash total kita bisa memberitahu user apa yang terjadi atau mencoba memulihkan kondisi

Kita bisa punya lebih dari satu blok catch untuk menangani jenis exception yang berbeda Ini asik banget karena kita bisa punya strategi penanganan yang spesifik buat tiap jenis error Misalnya kita bisa tangani FormatException beda dengan NullReferenceException

csharp
try
{
    string input = "abc";
    int angka = int.Parse(input);
    Console.WriteLine($"Angka yang berhasil dikonversi adalah: {angka}");

Penting diingat urutan blok catch itu berpengaruh Kita harus menaruh exception yang lebih spesifik di atas sebelum exception yang lebih umum Exception itu adalah base class untuk semua exception jadi selalu letakkan catch (Exception ex) di paling akhir kalau memang mau dipakai

Blok Finally Apapun yang terjadi ini pasti jalan

Blok finally itu seperti janji yang harus ditepati Apapun yang terjadi baik ada exception maupun tidak kode di dalam blok finally PASTI akan dieksekusi Ini asik banget buat membersihkan resource yang mungkin kita pakai Misalnya menutup koneksi database menutup file atau merilis memori yang tidak terpakai

csharp
FileStream fs = null;
try
{
    fs = new FileStream("contoh.txt", FileMode.Open);
    // Lakukan operasi baca tulis file di sini
    Console.WriteLine("File berhasil dibuka dan diproses.");
}
catch (FileNotFoundException)
{
    Console.WriteLine("File tidak ditemukan. Pastikan nama filenya benar.");
}
finally
{
    if (fs != null)
    {
        fs.Close(); // Pastikan file ditutup apapun yang terjadi
        Console.WriteLine("Resource file sudah ditutup.");
    }
}

Dengan finally kita bisa yakin resource yang kita pinjam akan dikembalikan dengan rapi bahkan saat aplikasi sedang diterpa badai error

Kenali Jenis Exception Spesifik

C# punya banyak jenis exception bawaan yang bisa kita tangani Ada DivideByZeroException kalau kita bagi angka dengan nol ArgumentNullException kalau ada argumen metode yang kosong padahal nggak boleh IOException kalau ada masalah dengan operasi input output dan banyak lagi

Mengidentifikasi jenis exception yang spesifik membantu kita memberikan feedback yang lebih akurat kepada pengguna dan mengimplementasikan solusi yang tepat Misalnya kalau DivideByZeroException terjadi kita bisa minta user memasukkan angka selain nol bukan sekadar error generik

csharp
try
{
    Console.WriteLine("Masukkan angka pertama:");
    int num1 = int.Parse(Console.ReadLine());Console.WriteLine("Masukkan angka kedua:");
    int num2 = int.Parse(Console.ReadLine());

Kapan Kita Melempar Exception Sendiri Throw

Terkadang di aplikasi kita ada kondisi tertentu yang kita anggap sebagai error dan kita ingin agar kondisi itu ditangani oleh Exception Handling kita sendiri Di sinilah kata kunci throw berperan

Misalnya kita membuat fungsi yang mengharuskan inputnya positif Jika input yang diberikan adalah angka negatif maka kita bisa melempar ArgumentOutOfRangeException

csharp
public static void ProsesAngkaPositif(int angka)
{
    if (angka < 0)
    {
        throw new ArgumentOutOfRangeException("angka", "Angka tidak boleh negatif.");
    }
    Console.WriteLine($"Memproses angka positif: {angka}");
}

Ini asik karena kita bisa mendefinisikan aturan main sendiri dan memastikan fungsi kita digunakan dengan benar Jika tidak maka exception akan dilempar

Membuat Exception Sendiri Custom Exception

Untuk skenario yang lebih kompleks kadang exception bawaan C# tidak cukup menggambarkan kondisi error yang terjadi Dengan C# kita bisa membuat custom exception sendiri Caranya gampang kita cukup membuat class baru yang mewarisi class Exception

csharp
public class IDCSUserNotFoundException : Exception
{
    public IDCSUserNotFoundException() : base("Pengguna tidak ditemukan di sistem IDCSharp.") { }
    public IDCSUserNotFoundException(string message) : base(message) { }
    public IDCSUserNotFoundException(string message, Exception innerException) : base(message, innerException) { }
}// Contoh penggunaan
public class UserService
{
    public void GetUserById(int id)
    {
        if (id <= 0)
        {
            throw new ArgumentException("ID pengguna tidak valid.", nameof(id));
        }
        // Anggaplah di sini ada logika cari user di database
        bool userExists = false; // Simulasikan user tidak ditemukan
        if (!userExists)
        {
            throw new IDCSUserNotFoundException($"Pengguna dengan ID {id} tidak ditemukan.");
        }
        Console.WriteLine($"Pengguna dengan ID {id} ditemukan.");
    }
}

Membuat custom exception membuat kode kita lebih ekspresif dan lebih mudah dimengerti saat debugging error yang terjadi di level bisnis aplikasi kita

Tips dan Best Practices Exception Handling yang Asik

Jangan Menelan Exception

Ini salah satu kesalahan umum Ketika kita menangkap exception di blok catch tapi tidak melakukan apa apa cuma catch (Exception ex) { } itu namanya menelan exception Ini bahaya karena errornya hilang tanpa jejak dan kita nggak tahu ada masalah apa yang terjadi di aplikasi kita

Selalu log exception yang terjadi atau setidaknya berikan pesan yang informatif ke user ya

Catch Spesifik Dulu Baru Generik

Seperti yang sudah kita bahas sebelumnya selalu dahulukan catch untuk exception yang lebih spesifik lalu baru yang lebih umum ini untuk memastikan kita menangani error dengan cara yang paling relevan

Log Exception dengan Baik

Ketika exception terjadi penting banget untuk mencatat detailnya Ini berguna banget saat debugging dan troubleshooting Log bisa mencakup stack trace pesan error waktu kejadian dan informasi relevan lainnya Kita bisa pakai library logging seperti Serilog atau NLog untuk ini

Jangan Gunakan Exception untuk Kontrol Alur Normal

Exception itu harusnya dipakai untuk kondisi yang benar benar tidak terduga atau abnormal Bukan untuk mengontrol alur program yang normal Misalnya jangan pakai try catch untuk validasi input yang sering gagal daripada pakai if else biasa

csharp
// Buruk
try
{
    int angka = int.Parse(input);
}
catch (FormatException)
{
    Console.WriteLine("Input bukan angka.");
}

Metode TryParse lebih efisien dan ditujukan untuk skenario validasi seperti ini

Gunakan Using Statement untuk Resource yang Bisa di Dispose

Kalau kita berurusan dengan resource yang perlu di dispose seperti FileStream SqlConnection atau StreamReader lebih asik pakai using statement Blok using secara otomatis akan memanggil metode Dispose() di akhir bloknya bahkan kalau ada exception sekalipun Ini semacam try finally otomatis yang elegan

csharp
using (StreamReader sr = new StreamReader("fileyangada.txt"))
{
    string line;
    while ((line = sr.ReadLine()) != null)
    {
        Console.WriteLine(line);
    }
} // sr.Dispose() otomatis dipanggil di sini

Penutup Yuk Praktik Biar Makin Jago

Menguasai Exception Handling itu seperti punya tameng pelindung buat aplikasi kita Kita jadi bisa lebih tenang dan percaya diri pas ngoding karena tahu aplikasi kita bisa menghadapi rintangan dengan baik Ini bukan cuma tentang menghindari error tapi juga tentang menciptakan pengalaman pengguna yang mulus dan profesional

Materi ini memang butuh jam terbang jadi jangan takut buat eksperimen dan mencoba berbagai skenario error di kode kita Semakin sering kita berlatih semakin jago kita dalam mengidentifikasi dan menangani exception yang muncul di aplikasi kita

Oke deh sampai sini dulu obrolan asik kita tentang Exception Handling di C# Semoga bermanfaat dan bikin ngoding kita makin produktif ya Kalau ada pertanyaan atau mau sharing pengalaman yuk ngobrol di kolom komentar atau di komunitas IDCSharp Sampai jumpa di artikel berikutnya dan terus semangat ngodingnya

Read more