Hallowww semua, di artikel ini saya coba membahas mengenai Exception Handling di bahasa Dart.
Apa itu Exception Handling ? ini merupakan cara komputer untuk mengelola error. Jadi saat bikin program itu tidak semuanya akan berjalan mulus, nanti pasti ada error yang harus kita kelola.
Pada kondisi apa terjadi error ? Umumnya exception handling digunakan saat:
- Tipe data tidak sesuai
- Method / property tidak ditemukan
- Error saat membaca file / IO
- Kesalahan jaringan saat melakukan request / response
- (...tambahkan dikolom komentar yaa hehe)
Di Dart sendiri sudah disediakan fitur exception handling, dan caranya pun mirip seperti bahasa pemrograman lainnya. Konsep utama dari exception handling adalah try-catch.
try-catch
try merupakan tahapan awal untuk menjalankan exception handling. Sedangkan catch digunakan untuk menerima errornya.
Contoh programnya :
try { // Kode disini akan berjalan pertama kali print("Proses..."); dynamic name = 20; print(name.length); // Awww error ! print("Finish !"); // Kode tidak dijalankan } catch (err) { print("Terjadi kesalahan"); }
Enter fullscreen mode Exit fullscreen mode
Program diatas akan mengeluarkan error karena property length itu tidak ada di variable name.
Jadi cara kerjanya adalah pertama kode blok yang ada di dalam try akan dijalankan terlebih dahulu. Ketika terjadi error maka akan langsung lompat ke blok catch.
Output:
Kode program print("Finish !"); tidak dijalankan.
on
Dari bahasa yang saya pelajari sepertinya, Dart ini membuat konsep baru pada Exception Handling, karena pada umumnya yang tersedia hanyalah try, catch, dan finally tapi di Dart ini ada on.
Jadi apa itu on pada Dart ? on digunakan untuk mengelola error berdasarkan jenis errornya. Di kode sebelumnya kita hanya menggunakan try-catch saja yang dimana semua error akan masuk ke dalam catch.
Kode program diatas kita jalankan ulang tapi dengan print yang berbeda:
try { // Kode disini akan berjalan pertama kali print("Proses..."); dynamic name = 20; print(name.length); // Awww error ! print("Finish !"); // Kode tidak dijalankan } catch (err) { print("Terjadi kesalahan"); print(err.toString()); // Kode program baru }
Enter fullscreen mode Exit fullscreen mode
Outputnya adalah:
Dari gambar diatas kita melihat ada error dengan jenis NoSuchMethodError. Dari dokumentasinya, dituliskan:
...corresponding to a failed method call
Artinya error NoSuchMethodError adalah jenis error yang digunakan ketika method pada variabel tidak ada. Ini terjadi akibat property / method length tidak ada di variabel name.
Terus dimana on nya ?
Nahh disini kita bisa menerapkan keyword on. Maka programnya menjadi:
try { // Kode disini akan berjalan pertama kali print("Proses..."); dynamic name = 20; print(name.length); // Awww error ! print("Finish !"); // Kode tidak dijalankan } on NoSuchMethodError { // Kode program yang dialam `on` ini yang akan dijalankan print("Method tidak ditemukan"); } catch (err) { // Tidak dijalankan print("Terjadi kesalahan"); print(err.toString()); }
Enter fullscreen mode Exit fullscreen mode
Output:
Sekarang yang keluar adalah Method tidak ditemukan bukan Terjadi kesalahan. Kok iso ? itu karena jenis error nya adalah NoSuchMethodError jadi kode program yang ada didalam on NoSuchMethodError itulah yang akan dijalankan.
finally
finally akan dijalankan ketika semua proses selesai, baik itu ada error atau tidak.
Contoh program ketika ada error:
try { // Kode disini akan berjalan pertama kali print("Proses..."); dynamic name = 20; print(name.length); // Awww error ! print("Finish !"); // Kode tidak dijalankan } catch (err) { print("Terjadi kesalahan"); } finally { print("Proses try-catch selesai"); }
Enter fullscreen mode Exit fullscreen mode
Output program:
Contoh kode program ketika tidak ada error:
try { // Kode disini akan berjalan pertama kali print("Proses..."); dynamic name = 20; print(name); print("Finish !"); // Berjalan } catch (err) { print("Terjadi kesalahan"); } finally { print("Proses try-catch selesai"); }
Enter fullscreen mode Exit fullscreen mode
Output program:
Wait, kenapa harus pakai finally ?
Bukankah sama aja ketika kita tidak menggunakan finally ?
Okee kita coba kalau tanpa finally yaa. Jadi programnya:
try { // Kode disini akan berjalan pertama kali print("Proses..."); dynamic name = 20; print(name.length); // Awww error ! print("Finish !"); // Kode tidak dijalankan } catch (err) { print("Terjadi kesalahan"); } print("Proses try-catch selesai");
Enter fullscreen mode Exit fullscreen mode
Output program:
Ehhh, iyaa juga yaaa...
Eitss, finally ini biasanya digunakan untuk membuat program kita lebih konsisten. Umumnya digunakan ketika:
- Selesai terhubung ke database
- Membersihkan memori
Sumber //stackoverflow.com/a/16705037/9905881
Okee deh mungkin itu saja, untuk pembahasan mengenai error / exception handling di bahasa Dart. Kalau kalian memiliki saran / kritikan silahkan komentar yaa 😉
Terima kasih sudah membaca ~