by

Exception di CSharp

Secara teknis exception adalah obyek yang merepresentasikan error yang muncul pada saat aplikasi dijalankan. Jadi frase “membangkitkan exception” berarti membuat obyek Exception baru, menginisiasi informasi-informasi di dalamnya, dan menginformasikan pada sistem bahwa ada error yang muncul.

Exception diperkenalkan dalam dunia Object Oriented Programming (OOP). Berbeda dengan fungsi-fungsi pada bahasa C yang menggunakan nomor/kode untuk membedakan jenis error, exception menggunakan Class yang berbeda untuk setiap jenis kesalahan. Pada level yang paling atas, Exception memiliki dua turunan, yaitu SystemException dan ApplicationException (keterangan ada pada gambar di bawah). SystemException dihasilkan oleh CLR dan .Net Framework, sedangkan ApplicationException digunakan untuk exception yang didefinisikan oleh aplikasi itu sendiri.

Exception di CSharp
Exception di CSharp

Dari atas ke bawah, Class-Class tersebut merepresentasikan exception yang semakin spesifik. Tergantung pada keperluan/kebutuhan, aplikasi bisa memilih untuk menangani exception pada level yang lebih spesifik.

Try Statement

Konstruksi yang digunakan CSharp untuk menangani exception mirip (kalau tidak sama) dengan yang digunakan dalam Visual Basic .NET, C++ dan Java, yaitu try statement. Coba perhatikan struktur kode dibawah:

try
{
// operasi yang mungkin	menghasilkan error atau exception
}
catch(Exception ex)
{
// penanganan error atau exception
}
finally
{
// langkah-langkah yang harus selalu dilakukan,
// ada atau tidak ada exception
}

Try statement terdiri dari tiga blok, yaitu blok try, catch, dan finally. Blok try memuat inti proses program (yang mungkin menghasilkan exception atau error), sedangkan blok catch adalah blok yang akan menangani exception yang dihasilkan. Blok finally sendiri isinya adalah langkah-langkah yang harus selalu dijalankan, baik bila exception dihasilkan atau tidak. Blok catch dan finally tidak harus ada, tetapi minimal salah satu harus menyertai blok try. Jadi kemungkinannya ada tiga, yaitu try-catch, try-finally, dan try-catch-finally.

Urutan eksekusi kode program dalam try statement adalah sebagai berikut:

Statement dalam blok try akan dieksekusi satu persatu (dari atas ke bawah) seperti biasa. Bila tidak ada exception/error yang dihasilkan, maka setelah semua statement dalam blok try dijalankan, statement dalam blok finally akan dijalankan.

Bila terjadi kesalahan yang menghasilkan exception/error, eksekusi program akan melompat dari baris di mana exception itu dihasilkan ke blok catch yang memiliki tipe exception yang sesuai. Sesuai dalam hal ini bisa berarti bahwa tipe exceptionnya (Classnya) sama atau blok catch tersebut menspesifikasikan superclass dari exception yang dihasilkan. Setelah blok catch selesai dijalankan, eksekusi dilanjutkan ke blok finally.

Jadi statement dalam blok try menjadi relatif sederhana karena tidak perlu lagi setiap kali mengecek apakah statement sebelumnya menghasilkan error atau tidak. Setiap kali terjadi error, eksekusi akan melompat keluar dari blok try.

Berikut adalah contoh penggunaan try statement pada CSharp:

using System;
using System.IO;
namespace latihan
{
class ContohTry
{
public static void Main()
{
StreamReader sr = null;
try
{
Console.Write("Ketik nama file: ");
string namaFile = Console.ReadLine();
sr = File.OpenText(namaFile);
string s = sr.ReadToEnd();
Console.WriteLine("****	Isi	file	{0}:	****", namaFile);
Console.WriteLine(s);
}
catch(Exception e)
{
Console.WriteLine ("Exception: " + e.Message);
}
finally
{
if (sr != null) sr.Close(); 
}
Console.ReadLine();
}
}
}

Kode program diatas meminta user untuk memasukkan nama file dan kemudian program akan berusaha membaca dan mencetak isi file tersebut ke layar. Satu-satunya blok catch pada contoh kode tersebut memiliki parameter bertipe Exception. Ini berarti semua jenis kesalahan akan ditangani oleh blok tersebut. Secara umum, ini bukan ide yang bagus. Blok catch sebaiknya hanya menangani exception yang spesifik, bukan semua jenis exception.

Blok finally diatas sendiri berisi statement untuk menutup StreamReader yang digunakan untuk membaca file. Ini akan menyederhanakan program kalau exception mungkin dihasilkan di banyak tempat setelah StreamReader dibuka baik dari blok try maupun dari class yang lain. Dengan menempatkan sr.close pada blok finally, ini menjamin bahwa pada berakhirnya eksekusi fungsi tersebut, StreamReader st pasti ditutup. Hati-hati menggunakan blok finally. Pada kasus tersebut, st dicek terlebih dahulu apakah nilainya null atau tidak. Bila exception terjadi sebelum st dibuka, maka tidak ada yang perlu ditutup. Satu hal lagi, exception dalam CSharp boleh diabaikan, tidak seperti Java yang mengharuskan si pemanggil untuk menangani semua kemungkinan exception yang dihasilkan oleh method yang dipanggil.

Comment

Leave a Reply

Your email address will not be published. Required fields are marked *