jump to navigation

Exception Design (Bagian 01) – Keuntungan Menggunakan Exception Dibandingkan dengan Return Value 6 Juni 2008

Posted by firstyuyu in Exception Design.
trackback

Ada banyak keuntungan yang ditawarkan oleh mekanisme exception handling dibandingkan dengan penggunaan return value pada mekanisme pelaporan kesalahan sebuah aplikasi. Karena itu, suatu framework yang baik sudah seharusnya mengadopsi mekanisme ini untuk masalah penanganan kesalahannya. Berikut ini keunggulan menggunakan exception:

  1. Penggunaan exception akan membuat API kita mejadi lebih konsisten jika dibandingkan menggunakan return value. Hal ini karena exception memang didesain khusus untuk penanganan kesalahan, bukan yang lain. Sementara retun value, tujuan utamanya diciptakan bukanlah untuk penanganan kesalahan.
  2. Mekanisme exception terintegrasi secara baik dengan bahasa pemrograman berorientasi obyek. Ada beberapa konstruksi di dalam OOP yang tidak memungkinkan kita menggunakan return value sebagai mekanisme pelaporan kesalahan. Misalnya, di OOP terdapat konsep konstruktor. Karena konstruktor tidak mempunyai return value, maka tidak mungkin kita menggunakan return value sebagai mekanisme untuk menyampaikan bahwa telah terjadi kesalahan di dalam konstruktor. Tetapi hal ini tidak menjadi masalah jika kita menggunakan exception.
  3. Pada pelaporan kesalahan berbasis return value, kode untuk menangani kesalahan selalu terletak sangat dengan dengan kode yang mengalami kesalahan tersebut. Namun jika kita menggunakan exception, developer bisa memilih. Kode penanganan kesalahan bisa ditulis tepat di tempat terjadinya kesalahan, atau bisa juga dipusatkan pada suatu modul khusus yang terletak di layer yang lebih tinggi.
  4. Return value bisa diabaikan oleh developer (baik sengaja ataupun tidak). Namun exception tidak akan bisa diabaikan oleh developer. Hal ini akan meningkatkan kualitas aplikasi karena developer selalu dipaksa untuk menangani kesalahan yang terjadi. 

    Selain itu, jika seorang developer lupa dan mengabaikan nilai return value yang seharusnya merupakan kode kesalahan, maka aplikasi akan cenderung berjalan tanpa bisa diprediksi. Mungkin pada awalnya aplikasi akan tampak normal-normal saja seolah tidak terjadi sesuatu. Tapi suatu saat, tiba-tiba aplikasi tersebut akan berjalan dengan sangat aneh. Hal seperti ini termasuk bug yang sulit ditemukan. 

    Namun jika kita menggunakan exception dan terjadi kesalahan, maka thread akan dihentikan sementara dan membiarkan kode pemanggil menangani exception tersebut. Jika sampai di akhir stack tidak ada yang menangai exception tersebut, maka aplikasi akan dihentikan paksa. Poinnya adalah, jauh lebih baik aplikasi dihentikan secara paksa jika terjadi kesalahan yang tidak tertangani daripada dibiarkan berjalan tanpa bisa diprediksi hasilnya.

  5. Exception bisa membawa sangat banyak informasi tentang kesalahan yang terjadi (deskripsi, stack trace, lokasi baris kode, dll) dibandingkan return value yang mungkin hanya mengembalikan nilai integer saja.
  6. Exception sudah didukung oleh banyak IDE modern yang ada di pasar. Hal ini tentu akan sangat memudahkan kita ketika melakukan debugging menggunakan IDE tersebut.
Iklan

Komentar»

1. Zeft - 6 Juni 2008

ok yud, stuju bgt… !!

lalu pertanyaannya sedalam apakah kita seharusnya menggunakan exception dalam “mekanisme pelaporan kesalahan sebuah aplikasi”

apakah pelaporan kesalahan menggunakan return value dapat digantikan sepenuhnya dengan exception. ?

for example:
klo kita buat fungsi login() trus ada validasi user didalamnya, dan ternyata user yang menginisiasi fungsi tersebut bukan user valid, menurut kmu enakan pake exception ato pake returnvalue, untuk ngasi tau bahwa user tersebut gagal login ?

2. firstyuyu - 6 Juni 2008

Exception merupakan sebuah kontrak. Ia akan muncul ketika terjadi “kesalahan” atau method gagal melakukan tugas sesuai namanya.

Sebagai contoh, method Login(), sesuai namanya, maka tugasnya me-log pemakai agar bisa masuk ke sistem. Nah, jika tujuan ini gagal (mungkin karena username/password salah) maka seharusnya terjadi exception.

Berbeda dengan misalnya method IsValidUser(). Disini, tujuannya adalah memverifikasi seorang user. Jika user yang diverifikasi tidak sah, cukup dikembalikan nilai false, tidak perlu terjadi exception. Kenapa? Karena dari namanya, method IsValidUser() hanya bertugas memverifikasi. Apapun hasil verifikasi tersebut (user sah atau tidak) tidak menyebabkan method IsValidUser() gagal melakukan tugasnya.

Namun ada juga beberapa kasus dimana exception bisa menimbulkan dampak terhadap performa sistem. Pada kasus seperti ini, kita bisa menggunakan beberapa pattern yang terkait dengan exception. Apa saja pattern tersebut? Ikuti terus seri artikel “Exception Design” ini 🙂

3. aiman - 22 Juni 2008

Ada tidak metode exception di C++? sepertinya hanya digunakan return saja disana..

4. firstyuyu - 23 Juni 2008

iya, di C++ juga ada mekanisme exception. Banyak kok dibahas di buku-buku tentang C++. Coba aja baca buku Thinking In C++ (http://mindview.net/Books/TICPP/ThinkingInCPP2e.html) 🙂


Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s

%d blogger menyukai ini: