Özet - İstisnalar
- Dart kursu
- Başlangıç
- Ders 105/116
- 5 dk
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
void main() {
// BankAccount sınıfını tanımla
// try içinde para çekme çağır
// hata durumunda yazdır
}Örnek çözüm
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
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
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?
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 |