🎯 📗 Bagian 1 (Fundamental & Dasar) • Modul 10 100% Standar Industri & Vokasi

Exception Handling & Custom Error Classes

Modul pembelajaran Exception Handling & Custom Error Classes.

⚡ Pemrograman DART

12. Exception Handling & Custom Error Classes

1. Hirarki Exception vs Error di Dart

  • Error: Kesalahan fatal pada level sistem program yang umumnya tidak boleh ditangkap (contoh: OutOfMemoryError, StackOverflowError).
  • Exception: Kondisi tidak normal yang terduga (misal: koneksi timeout, file tidak ditemukan, pembagian dengan nol) yang wajib ditangani secara elegan agar aplikasi tidak crash.

2. Struktur Blok try, on, catch & finally

void koneksiServer(String ip) {
  try {
    if (ip == "0.0.0.0") {
      throw FormatException("IP Address tidak valid!");
    }
    print("Berhasil tersambung ke $ip");
  } on FormatException catch (e) {
    // Menangkap tipe Exception spesifik
    print("[SPESIFIK] Format salah: ${e.message}");
  } catch (e, stackTrace) {
    // Menangkap semua jenis exception lain + Stack Trace
    print("[UMUM] Terjadi kesalahan: $e");
    print("Trace: $stackTrace");
  } finally {
    // Blok yang PASTI selalu dijalankan dalam kondisi apapun
    print("Menutup socket koneksi.");
  }
}

3. Membuat Custom Exception Class

Kita dapat membuat kelas Exception kita sendiri dengan mengimplementasikan class Exception:

class SaldoKurangException implements Exception {
  final double saldoTersedia;
  final double nominalTarik;

  SaldoKurangException(this.saldoTersedia, this.nominalTarik);

  @override
  String toString() {
    return "Penarikan Gagal! Saldo Rp $saldoTersedia tidak cukup untuk menarik Rp $nominalTarik";
  }
}

void tarikUang(double saldo, double jumlah) {
  if (jumlah > saldo) {
    throw SaldoKurangException(saldo, jumlah);
  }
  print("Penarikan Rp $jumlah berhasil. Sisa saldo: Rp ${saldo - jumlah}");
}

void main() {
  try {
    tarikUang(50000, 100000);
  } catch (e) {
    print("Peringatan: $e");
  }
}