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");
}
}