C# - Exception Handling

Exception dalam C# digunakan untuk mengindikasikan terjadinya error pada sebuah aplikasi yang sedang digunakan. Pada aplikasi yang menggunakan .NET Framework, ketika terjadi error maka program tersebut secara otomatis akan menampilkan Exception. Contohnya ketika membuat suatu program pembagian dengan pembagi berupa 0. Karena angka tidak dapat dibagi dengan 0, maka program akan menampilkan Exception.


Error yang tidak di-handle akan membuat pengguna aplikasi kebingungan dengan pesan yang bersifat cryptic seperti itu, terlebih lagi terkadang pesan yang ditampilkan mungkin dapat digunakan seorang hacker untuk meretas aplikasi kita. 

Disinilah Exception Handling digunakan. Kita dapat menampilkan pesan yang user-friendly ketika terjadi error dengan menggunakan kerangka try - catch - finally. Ketika terjadi error pada salah satu baris kode pada blok try, maka program akan langsung "lompat" ke blok catch dan sisa kode yang terdapat pada blok try tidak dieksekusi. Pada blok catch ini kita dapat menampilkan pesan akibat error yang di-throw dari blok try. Seperti pada program di bawah ini


Ada beberapa properti yang disediakan class Exception dan turunannya. Pesan yang ditampilkan tersebut biasanya menggunakan properti Message dan StackTrace, dapat dilihat pada output program sebelumnya.


Jika kita menampilkan pesan error menggunakan properti Message dan StackTrace pada class Exception dan turunannya, maka outputnya akan sama, contohnya seperti program di samping

Pada .NET Framework terdapat class Exception yang memiliki bermacam-macam derived class(kelas turunan) seperti class DivideByZeroException di samping.

Dengan menggunakan DivideByZeroException kita dapat mengakses properti yang terdapat pada class Exception itu sendiri (seperti Message dan StackTrace) karena secara tidak langsung class DivideByZeroException adalah turunan dari class Exception. Pada Visual Studio IDE kita dapat menemukan definisi dari class yang telah disediakan oleh .NET dengan klik kanan pada class tersebut lalu pilih Go To Definition. Perhatikan gambar di bawah


Ketika kita melihat definisi dari class DivideByZeroException maka dapat kita lihat bahwa class tersebut adalah turunan dari class ArithmeticException, lalu ketika Go To Definition dari class ArithmeticException maka dapat dilihat bahwa class tersebut adalah turunan dari class SystemException, dan seterusnya kita akan terarah ke class Exception itu sendiri. Dapat dilihat properti-properti yang dimiliki oleh class Exception seperti Message dan StackTrace.

Contoh kasus lain yang menggunakan Exception Handling adalah ketika kita membuat program yang membaca konten dari sebuah file. Untuk membaca konten dari sebuah file pada C# dapat menggunakan class StreamReader yang merupakan bagian dari System.IO.

Contoh program yang membaca file bernama example.txt yang isinya "arliansyahazhary.blogspot.com C# - Exception Handling" yang disimpan di direktori C:\Sample Files\example.txt


Note: Parameter Constructor pada class StreamReader adalah lokasi file yang disimpan. Karena karakter backslash(\) adalah Escape Sequence Character(ESC) (misalnya \n dan \t), maka perlu ditaruh tanda @ di depan agar backslash tidak dianggap ESC. Untuk menampilkan isi dari file, kita dapat menggunakan method ReadToEnd() pada objek yang ber-class StreamReader. Lalu ketika telah selesai, file tersebut ditutup dengan method Close().

Nah, bagaimana jika file tersebut tidak ada? Jika file tidak ada maka program akan menampilkan FileNotFoundException


Ini adalah program yang meng-handle FileNotFoundException


Ketika constructor StreamReader tidak dapat menemukan file yang diinginkan, maka eksekusi akan melompat ke blok catch dan mengeksekusi kode yang ada di dalamnya. Pada class FileNotFoundException terdapat properti FileName sehingga kita dapat menampilkan nama file yang dicari. Lalu buat apa blok finally yang ada di bawahnya? Seperti yang kita ketahui bahwa program akan throw FileNotFoundException ke blok catch ketika mencapai baris kode (file = new StreamReader(@"C:\example.txt");) sehingga kode file.Close() tidak tereksekusi. Untuk itu kita memerlukan blok finally karena program akan mengeksekusi kode pada blok finally tersebut setelah mengeksekusi kode yang terdapat pada blok catch. Pada blok finally kita dapat menulis file.Close()selama objek file tidak sama dengan null.

Post a Comment