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