Pernah nggak, kamu lagi asik pakai aplikasi — tiba-tiba BLAM! — layarnya putih, atau keluar pesan error yang nggak jelas? Menyebalkan, kan? Nah, itulah yang terjadi kalau developer lupa atau nggak tahu cara menerapkan exception handling Dart yang benar. Artikel ke-8 dari seri Dart From Zero to Zorro ini hadir khusus buat kamu yang mau belajar cara bikin aplikasi yang tahan banting — nggak gampang crash cuma gara-gara input pengguna yang aneh atau koneksi internet yang putus.
Di sini kita akan bongkar tuntas: apa itu exception, kenapa wajib ditangani, dan gimana cara Dart menyediakan mekanisme yang elegan untuk menghadapinya. Siap? Ayo kita mulai!
Exception adalah kondisi tak terduga yang terjadi saat program berjalan — seperti file yang tidak ditemukan, pembagian dengan nol, atau koneksi jaringan yang gagal. Exception handling adalah mekanisme untuk mendeteksi, menangkap, dan merespons kondisi tersebut agar program tetap berjalan dengan benar.
🧯 Kenapa Exception Handling Dart Itu Wajib Kamu Kuasai?
Bayangkan kamu adalah pilot pesawat. Mesin tiba-tiba bermasalah di udara — apakah kamu langsung panik dan biarkan pesawat jatuh? Tentu tidak! Ada prosedur darurat: nyalakan mesin cadangan, hubungi menara kontrol, lakukan pendaratan darurat. Itulah analogi exception handling dalam pemrograman Dart.
Tanpa exception handling, program Dart kamu akan:
| Kondisi | ❌ Tanpa Handling | ✅ Dengan Handling |
|---|---|---|
| Input salah | App crash 💥 | Tampilkan pesan error |
| Jaringan putus | App freeze/crash 💥 | Retry atau notifikasi user |
| File tidak ada | Unhandled Exception 💥 | Buat file baru / fallback |
| Bagi dengan nol | IntegerDivisionByZeroException 💥 | Kembalikan nilai default |
Menurut laporan developer, sekitar 60% bug kritis dalam aplikasi mobile berasal dari error yang tidak ditangani — terutama yang berkaitan dengan I/O, parsing data, dan operasi jaringan. Jadi, exception handling bukan opsional — ini kebutuhan wajib!
🔬 Anatomi Exception Handling di Dart: try, catch, on, finally
Dart menyediakan blok try-catch-finally yang sangat fleksibel. Mari kita bedah satu per satu dengan analogi yang mudah dipahami.
try — Zona PercobaanSemua kode yang berpotensi error dimasukkan ke sini. Analoginya: kamu memasuki ruangan gelap sambil membawa senter — kamu siap jika terjadi sesuatu.
on — Tangkap Tipe SpesifikGunakan on TipeException untuk menangani jenis error tertentu. Seperti dokter yang punya penanganan berbeda untuk flu vs patah tulang.
catch — Tangkap Semua ErrorMenangkap exception apapun beserta detail stack trace-nya. Ibarat jaring pengaman di sirkus — siap menangkap apapun yang jatuh.
finally — Selalu DijalankanKode di sini akan selalu dijalankan, baik ada error maupun tidak. Cocok untuk tutup koneksi database, tutup file, atau bersihkan resource.
Urutan blok on sangat penting! Letakkan tipe exception yang paling spesifik di atas, dan yang paling umum di bawah. Kalau dibalik, exception spesifik tidak akan pernah tertangkap karena sudah "dimakan" oleh yang umum.
🛠️ Level Up: Membuat Custom Exception di Dart
Exception bawaan Dart sudah cukup untuk banyak kasus. Tapi bagaimana kalau kamu bikin aplikasi toko online, dan perlu error khusus seperti "stok barang habis" atau "user belum login"? Di sinilah custom exception berperan. Ini adalah tanda bahwa kamu sudah berpikir layaknya developer profesional!
Cara membuat custom exception di Dart sangat mudah — cukup implements class Exception.
Di Dart, kamu bisa throw objek apa saja — tidak harus class yang implements Exception. Bahkan throw "Error string" valid! Tapi konvensi terbaik tetap menggunakan class yang implements Exception atau Error agar kode lebih terstruktur dan mudah di-debug.
🔍 Exception vs Error, dan Kapan Pakai rethrow
Banyak pemula yang bingung: apa bedanya Exception dan Error di Dart? Ini perbedaannya dalam dunia nyata.
- Kondisi yang bisa diantisipasi
- Bisa & sebaiknya di-handle
- Contoh:
FormatException,IOException - Berasal dari input user atau sistem eksternal
- Bug atau kesalahan logika program
- Biasanya tidak di-catch — dibiarkan crash
- Contoh:
StackOverflowError,OutOfMemoryError - Menandakan ada yang salah di kode kamu!
Ada satu keyword keren lagi: rethrow. Gunakan ini ketika kamu ingin mencatat error (logging), lalu melempar kembali exception tersebut ke pemanggil di atasnya.
Jangan gunakan catch (e) {} yang kosong (silent catch)! Ini adalah kebiasaan buruk yang menyembunyikan bug. Selalu minimal log atau tampilkan pesan ke user agar kamu tahu ada yang salah.
- Tangkap exception sepesifik mungkin — hindari catch-all jika tidak perlu.
- Gunakan
finallyuntuk membersihkan resource (koneksi, file, dsb). - Buat custom exception untuk domain logic aplikasi kamu.
- Jangan lupa uji kode error path kamu — bukan hanya happy path!
Artikel ini adalah bagian ke-8 dari 16 artikel seri Belajar Dart: Dart From Zero to Zorro. Lihat daftar lengkap semua artikel untuk belajar Dart dari nol hingga mahir secara terstruktur!
🗺️ Lihat Semua 16 Artikel →Kamu Sudah Satu Langkah Lebih Dekat Jadi Developer Profesional! 🚀
Di artikel ke-8 ini, kita sudah tuntas mempelajari exception handling Dart dari dasar hingga level yang lebih advanced. Berikut poin-poin utama yang wajib kamu ingat:
- Blok try-on-catch-finally adalah tulang punggung exception handling di Dart.
- Gunakan
on TipeExceptionuntuk menangkap error spesifik — lebih aman dan presisi. - Custom exception memungkinkan kamu membuat pesan error yang bermakna sesuai domain aplikasimu.
- Keyword
rethrowberguna untuk logging sekaligus meneruskan error ke pemanggil di atasnya. - Exception (kondisi yang diantisipasi) berbeda dari Error (bug di kode) — pahami perbedaan ini!
Setelah ini, kita akan masuk ke topik yang tak kalah seru: Dart Asynchronous — di mana kamu akan belajar cara kerja Future, async, dan await. Stay tuned!
💬 Ada pertanyaan? Bingung di bagian mana? Tulis di kolom komentar di bawah — kita diskusi bareng! Dan kalau artikel ini membantu, jangan lupa share ke teman-teman yang juga lagi belajar Dart. Setiap share kamu sangat berarti untuk seri ini terus berlanjut! 🙏