CodeBlanks Logo Icon CodeBlanks

Özet - İstisnalar

try/catch, finally ve özel istisnayı birleştirerek bir banka hesap sınıfı yazarsın.

Özet - İstisnalar

Bu grupta istisna yönetimini öğrendin: try/catch ile hata yakalama, throw ile hata fırlatma, finally ile temizlik, Exception sınıfı ile özel istisna tanımlama ve on ile türe göre yakalama. Şimdi hepsini bir banka hesap sınıfında birleştireceğiz.

Bir banka hesabı para çekme sırasında bakiyeyi denetler. Yetersizse BalanceError fırlatır. Çağıran try ile sarar, on BalanceError ile özel mesaj verir, finally ile işlem kaydını yazar. Bu, gerçek bir uygulamada istisnaların nasıl kullanıldığını gösterir.

Uygulama Sıra sende: bakiye denetimi

BankAccount adında bir sınıf tanımla. int balance alanı ve BankAccount(this.balance) kurucusu olsun. void withdraw(int amount) yöntemi balance < amount ise throw Exception("yetersiz bakiye") fırlatsın. main içinde final a = BankAccount(100); ile başlat, try içinde a.withdraw(150) çağır ve catch (e) ile print(e) yazdır.

Başlangıç kodu

main.dart
void main() {
  // BankAccount sınıfını tanımla
  // try içinde para çekme çağır
  // hata durumunda yazdır
}

Örnek çözüm

main.dart
class BankAccount {
  int balance;
  BankAccount(this.balance);
  void withdraw(int amount) {
    if (balance < amount) throw Exception("yetersiz bakiye");
  }
}

void main() {
  final a = BankAccount(100);
  try {
    a.withdraw(150);
  } catch (e) {
    print(e);
  }
}

Beklenen çıktı

Exception: yetersiz bakiye

Uygulama Sıra sende: özel istisna ile banka

BalanceError adında Exception uygulayan bir sınıf tanımla; final String message alanı ve toString yöntemi message'ı döndürsün. BankAccount sınıfında withdraw(int amount), bakiye yetersizse throw BalanceError("yetersiz bakiye") fırlatsın. main içinde try ile a.withdraw(150) çağır; on BalanceError catch (e) ile print(e) yazdır; finally ile print("işlem bitti") yazdır.

Başlangıç kodu

main.dart
void main() {
  // BalanceError sınıfını tanımla
  // BankAccount sınıfını tanımla
  // try + on BalanceError + finally ile işlemi sar
}

Örnek çözüm

main.dart
class BalanceError implements Exception {
  final String message;
  BalanceError(this.message);
  String toString() => message;
}

class BankAccount {
  int balance;
  BankAccount(this.balance);
  void withdraw(int amount) {
    if (balance < amount) throw BalanceError("yetersiz bakiye");
  }
}

void main() {
  final a = BankAccount(100);
  try {
    a.withdraw(150);
  } on BalanceError catch (e) {
    print(e);
  } finally {
    print("işlem bitti");
  }
}

Beklenen çıktı

yetersiz bakiye
işlem bitti

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 BankAccount.withdraw yöntemi ne zaman throw yapar?

main.dart
void withdraw(int amount) {
  if (balance < amount) throw Exception("yetersiz");
}
  • bakiye tutardan küçükse
  • bakiye tutara eşitse Doğru cevap
  • bakiye sınıfın alanıysa
  • her zaman

Açıklama: Yetersiz bakiyede throw fırlatır.

2 İstisna araçlarını eşleştir

Kavram Anlamı
try riskli kodu taşır
throw hatayı fırlatır
catch hatayı yakalar
finally temizliği yapar

Başlangıç bölümündeki tüm dersler