dart exception handling | java php laravel linux mysql sql bootstrap html css query java php laravel linux mysql sql bootstrap html css query: dart exception handling

Sunday, May 3, 2026

dart exception handling

Dart From Zero to Zorro · Artikel 8 dari 16

Exception Handling —
Tangani Error Biar
Aplikasi Nggak Crash

Pelajari cara menangani error di Dart secara elegan — dari try-catch sampai custom exception — supaya aplikasimu tahan banting dan profesional.

#ErrorHandling #ExceptionHandling #TryCatch #Dart
⏱ 8 menit
Estimasi Baca
⚙️ Menengah
Level
2026
Tahun Terbit

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!

📌 Definisi Kunci

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:

📊 Analisis: Dampak Tanpa vs Dengan Exception Handling
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
🔥 Fakta Menarik

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.

1
Blok try — Zona Percobaan

Semua kode yang berpotensi error dimasukkan ke sini. Analoginya: kamu memasuki ruangan gelap sambil membawa senter — kamu siap jika terjadi sesuatu.

2
Blok on — Tangkap Tipe Spesifik

Gunakan on TipeException untuk menangani jenis error tertentu. Seperti dokter yang punya penanganan berbeda untuk flu vs patah tulang.

3
Blok catch — Tangkap Semua Error

Menangkap exception apapun beserta detail stack trace-nya. Ibarat jaring pengaman di sirkus — siap menangkap apapun yang jatuh.

4
Blok finally — Selalu Dijalankan

Kode di sini akan selalu dijalankan, baik ada error maupun tidak. Cocok untuk tutup koneksi database, tutup file, atau bersihkan resource.

main.dart
// Contoh lengkap: try-on-catch-finally

void ambilDataPengguna(int id) {
  try {
    // Zona berbahaya — kode yang mungkin error
    if (id <= 0) {
      throw ArgumentError('ID pengguna harus lebih dari 0!');
    }
    if (id == 999) {
      throw FormatException('Format ID tidak dikenali.');
    }
    print('Data pengguna ID $id berhasil diambil ✅');

  } on ArgumentError catch (e) {
    // Tangkap ArgumentError secara spesifik
    print('⚠️ Argumen salah: ${e.message}');

  } on FormatException catch (e) {
    // Tangkap FormatException secara spesifik
    print('🔴 Format error: ${e.message}');

  } catch (e, stackTrace) {
    // Tangkap semua error lainnya
    print('❌ Error tak terduga: $e');
    print('Stack trace: $stackTrace');

  } finally {
    // Selalu berjalan — bersihkan resource
    print('🔄 Proses selesai — resource dibersihkan.');
  }
}

void main() {
  ambilDataPengguna(5);    // ✅ Sukses
  ambilDataPengguna(-1);   // ⚠️ ArgumentError
  ambilDataPengguna(999);  // 🔴 FormatException
}
💡 Tips Pro

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.

custom_exception.dart
// Langkah 1: Buat custom exception class
class StokHabisException implements Exception {
  final String namaProduk;
  final int stokTersisa;

  StokHabisException(this.namaProduk, this.stokTersisa);

  // Override toString untuk pesan yang jelas
  @override
  String toString() {
    return 'StokHabisException: "$namaProduk" '
           'hanya tersisa $stokTersisa unit.';
  }
}

// Langkah 2: Gunakan custom exception
void beliProduk(String nama, int jumlah, int stok) {
  if (jumlah > stok) {
    throw StokHabisException(nama, stok);
  }
  print('🛒 Berhasil membeli $jumlah unit "$nama"!');
}

void main() {
  try {
    beliProduk('Laptop Gaming', 5, 2); // beli 5, stok 2
  } on StokHabisException catch (e) {
    print('❌ Gagal: $e');
    // Output: ❌ Gagal: StokHabisException: "Laptop Gaming"
    //         hanya tersisa 2 unit.
  }
}
⚡ Insight Penting

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.

🆚 Exception vs Error di Dart
✅ Exception
  • Kondisi yang bisa diantisipasi
  • Bisa & sebaiknya di-handle
  • Contoh: FormatException, IOException
  • Berasal dari input user atau sistem eksternal
❌ Error
  • 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.

rethrow_example.dart
void prosesData(String data) {
  try {
    int nilai = int.parse(data); // Bisa throw FormatException
    print('Nilai: $nilai');
  } catch (e) {
    // Catat error ke sistem logging
    print('📋 Log: Error terjadi pada prosesData() — $e');
    rethrow; // Lempar kembali ke pemanggil
  }
}

void main() {
  try {
    prosesData('bukan_angka');
  } catch (e) {
    print('🔴 Ditangkap di main: $e');
  }
}
⚠️ Perhatian

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.

💡 Tips Best Practice
  • Tangkap exception sepesifik mungkin — hindari catch-all jika tidak perlu.
  • Gunakan finally untuk membersihkan resource (koneksi, file, dsb).
  • Buat custom exception untuk domain logic aplikasi kamu.
  • Jangan lupa uji kode error path kamu — bukan hanya happy path!
📚
Bagian dari Seri
Dart From Zero to Zorro

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 →
📝 Kesimpulan

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 TipeException untuk menangkap error spesifik — lebih aman dan presisi.
  • Custom exception memungkinkan kamu membuat pesan error yang bermakna sesuai domain aplikasimu.
  • Keyword rethrow berguna 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!

📚 Lihat Semua Artikel

💬 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! 🙏

🏷️ Tags
#BelajarDart #DartFromZeroToZorro #ExceptionHandling #ErrorHandling #TryCatch #CustomException #ProgrammingDart #Flutter

No comments:

Post a Comment

saifiahmada.com adalah blog belajar programming Indonesia, membahas lengkap materi bahasa pemrograman: code HTML, CSS, Bootstrap, Desain, PHP, MySQL, coding Java, Query, SQL, dan dunia linux