Tuesday, November 12, 2013

Error Handling dengan try dan catch()

Untuk menguji apakah kode yang telah anda buat terdapat kesalahan atau tidak, silahkan uji kode itu dengan try ... catch().

Sintaks try ... catch():

try { // code that might cause an error goes here } catch (error) { // error message or other response goes here }

Cukup tambahkan kode yang ingin diuji di bagian try, jika kode itu memiliki kesalahan, blok kode di bagian catch() akan dieksekusi, sebaliknya jika kode yang diuji tidak terdapat satu kesalahan, blok kode di bagian try yang akan dieksekusi.

Sebagai contoh saja, asumsikan kode di bawah ini terdapat kesalahan, di mana dalam kasus ini saya telah lupa mendeklarasikan variabel b:

try { var a = 10; var c = a / b; alert(c); } catch (error) { alert(error); // ini dijalankan }

Jika pengujian di atas dijalankan, kita akan mendapati informasi bahwa variabel b adalah undefined, dan nama error seperti ini termasuk ReferenceError. Untuk mengetahui nama error yang mana ketika kesalahan terjadi, gunakan pola berikut:

try { // code that might cause an error goes here } catch(error) { if(error.name.toString()) { alert(error.name); } }

Contoh di bawah ini nama error yang dikembalikan adalah SyntaxError:

try { eval("a ++ b"); } catch (error) { if(error.name.toString()) { alert(error.name); // "SyntaxError" } }

Contoh di bawah ini menguji apakah nama error yang terjadi adalah SyntaxError:

try { eval("a ++ b"); } catch (error) { if(error.name.toString() === "SyntaxError") { alert("True"); // ini dijalankan } else{ alert("False"); } }

Kembali ke kasus di awal, silahkan saja anda deklarasikan variabel b, dipastikan tidak akan muncul informasi kesalahan yang terjadi, dan ini berarti blok kode di bagian try dijalankan:

try { var a = 10; // mendeklarasikan variabel b dan menugaskan nilai 2 untuknya var b = 2; var c = a / b; alert(c); // 5 dikembalikan } catch (error) { alert(error); }

Sekedar tambahan saja, agar IE menginformasikan pesan kesalahannya itu lebih bersifat informatif, dibanding hanya memberitahukan bahwa itu adalah objek Error, pastikan properti dari objek Error digunakan dan setelah sebelumnya ada variabel yang menunjuk target browser adalah IE (variabel isIE), dan mungkin seperti ini:

var isIE = (navigator.userAgent.indexOf("MSIE")) > -1; try { var a = 10; var c = a / b; alert(c); } catch (error) { if(isIE) { alert(error.description); } else { alert(error); } }

Satu lagi, finally. Pada dasarnya kode di bagian finally ini selalu dieksekusi, mau kode yang diuji error ataupun tidak. Sebagai contoh saja, coba di bagian try berikan kode untuk diuji, apapun hasilnya, dipastikan jendela browser yang ada langsung tertutup:

try { // code that might cause an error goes here } catch(error) { alert(error.message) } finally { window.close(); }

Error handling atau penanganan kesalahan tidak hanya dengan try ... catch() saja, bisa juga dengan melibatkan throw, atau objek Error. Tetapi tidak di artikel kali ini, mungkin dilain kesempatan.