Learn
← Previous Next →

Hari 14: Error Handling & Enum

60 min Last updated 09 Apr 2026

Exception & Error Handling

class KreditException implements Exception {
  final String pesan;
  KreditException(this.pesan);
  @override String toString() => "KreditException: $pesan";
}

double hitungCredit(double pinjaman, double suku, int bulan) {
  if (pinjaman <= 0) throw KreditException("Pinjaman harus > 0");
  if (suku < 0 || suku > 1) throw KreditException("Suku bunga 0-100%");
  if (bulan <= 0) throw ArgumentError("Bulan harus positif");
  double total = pinjaman * (1 + suku);
  return total / bulan;
}

void main() {
  try {
    double cicilan = hitungCredit(12000000, 0.10, 12);
    print("Cicilan: Rp ${cicilan.toStringAsFixed(0)}");
    hitungCredit(-100, 0.1, 12);
  } on KreditException catch (e) {
    print("Kredit Error: $e");
  } on ArgumentError catch (e) {
    print("Argumen salah: $e");
  } finally {
    print("Perhitungan selesai.");
  }
}

Enum di Dart

enum Status { aktif, nonAktif, pending, ditangguhkan }

enum Prioritas {
  rendah(1),
  sedang(2),
  tinggi(3),
  kritis(4);

  final int level;
  const Prioritas(this.level);

  bool get perluPerhatian => level >= 3;
}

void main() {
  Status s = Status.aktif;
  print(s.name);   // aktif
  print(s.index);  // 0

  Prioritas p = Prioritas.kritis;
  print("Level: ${p.level}");             // 4
  print("Perlu perhatian: ${p.perluPerhatian}"); // true

  for (var pr in Prioritas.values) {
    print("${pr.name}: level ${pr.level}");
  }
}

💡 Notice: Dart enum modern mendukung constructor, getter, dan method.

Assignment

Buat enum MetodePembayaran dan class Transaksi dengan biaya admin.

Expected output:

Jumlah: Rp 100000
Metode: kartuKredit
Biaya admin: Rp 2000
Total: Rp 102000
Dart main.dart
Solution
Output