Pada beberapa pekan lalu saya kedapatan giliran untuk melakukan sebuah seminar teknologi, dimana temanya pada saat itu adalah Golang. Beberapa pertanyaan di akhir sesi akhirnya diajukan, termasuk hal yang saat ini menjadi bahan tulisan saya.

Ada beberapa audience yang bertanya mengenai penanganan error pada aplikasi Go yang pada saat itu sedang saya demokan. Pertanyaannya kurang lebih tentang bagaimana penanganan error pada saat proses Crawling aplikasi saat mendapatkan informasi directory dan ada juga bagaimana menghandle error yang didapatkan pada saat aplikasi dijalankan, apakah di-ignore begitu saja?

Ada beberapa hal yang perlu kita ketahui sebagai desainer sebuah program, dimana Error merupakan hal yang tak terelakkan ketika sebuah aplikasi berjalan, dan yang tidak kalah penting juga tentang bagaimana kita menghandle error tersebut.

Bedakan Error dengan Exception

Ada kalanya kita menghendaki sebuah program melaporkan error ketika terdapat hal yang tidak sesuai dalam jalannya program. Namun hati-hati, karena error yang kita maksud mungkin adalah sebuah Exception. Exception disini adalah sebuah keadaan yang mengakibatkan program kita berjalan dengan tidak semestinya, namun hal itu masih tetap dapat di toleransi.

Misalnya, ada sebuah program yang melakukan pendeteksian struktur file dan folder pada hardisk, diharapkan program tersebut dapat menghasilkan visual bagan (tree) setelah selesai scanning dari keseluruhan file & folder. Hal seperti ini tentunya mempunyai beberapa kemungkinan yang terjadi di tengah proses tersebut, seperti tidak dapat mendeteksi jenis file, file system corruption sampai pada potensi bad sectors. Namun apakah proses harus terhenti di tengah jalan dan user harus melakukan proses fix pada error yang ditemukan? seharusnya tidak.

Error seperti ini dapat dikategorikan sebagai exception, dimana kemungkinan-kemungkinan tersebut sudah pasti akan muncul, dan tentu penanganannya harus sesuai, karena tidak ideal jadinya jika program tersebut sudah melakukan proses scanning hseparuh hardisk lalu proses berhenti merelakan informasi dari proses yang sudah terjadi sebelumnya.

Hal ini mirip seperti penanganan try - catch pada sebuah program, jika ditemukan ada kesalahan, program akan melakukan throw error dan selanjutnya akan di identifikasi oleh block catch dan finally untuk dilanjutkan atau dihentikan.

Buat kriteria jenis Error dan Urgensinya

Error yang baik selalu memiliki kategorinya. Sebagai contoh kecil, HTTP memiliki jenis dari status code dimana terdapat beberapa kriteria yang menjelaskan jenis balikan error kepada clientnya. Hal yang sama juga berlaku pada setiap program, bahkan untuk program berskala besar memiliki kode error tertentu saat mengalaminya.

Windows Error Code

Dari sini tidak hanya pengguna yang diuntungkan, namun kita selaku perancang aplikasi dapat terbantu melalui informasi tersebut. Semakin sempit pengkategorian jenis error yang dibuat, maka semakin mudah identifikasi malfungsi program dapat dilakukan.

Selain itu urgensi setiap error tidak selalu sama, ada jenis error yang mengharuskan program terhenti, ada pula jenis error yang masih bisa di toleransi. Hal ini bisa dicapai dengan melakukan pemetaan level error dalam program, sehingga program dapat mengambil sikap yang tepat dengan error yang terjadi.

Error tidak selalu merupakan Bugs

Seringkali kita mengaggap sebuah program memiliki cacat bila memunculkan pesan error. Padahal tidak seluruhnya benar, sebuah error sejatinya memang harus diketahui dalam setiap proses sistem, namun adakalanya karena satu dan lain hal, program yang kita buat tidak dapat bersesuaian dengan ekosistemnya.

Contohnya sebuah aplikasi Android yang tidak berjalan pada jenis API tertentu, Gagal mendapatkan lokasi karena tidak diijinkan mengakses GPS pada perangkatnya atau, sebuah website yang fungsionalitasnya terhenti karena dimuat dalam browser IE7 dan mobile browser versi lawas, jadi jika seperti itu anda mau memperbaikinya? dan jika iya, bagaimanakah prioritasnya?.

Error tidak selalu buruk

Saya selalu ingat akan pernyataan dari The Zen of Python dimana ada kalimat yang menyebutkan tentang Errors should never pass silently.

Hal tersebut cukup menyimpulkan bahwa sebuah error tidak boleh bersembunyi, meskipun ia hanya muncul dalam sebaris Logging, error harus tetap terilihat dan diketahui agar kita sebagai perancang program dapat mengambil kesimpulan terhadapnya.