Dart
Hata yönetimi
try/catch ile hata yönetimi eklersin.
Hata yönetimi
Bir listede var olmayan bir indeksi çağırırsan Dart RangeError fırlatır. Program bu hatadan dolayı çöker. Ama try/catch ile hatayı yakalayıp kullanıcıya nazik bir mesaj gösterirsin; program çalışmaya devam eder.
Örneğin iki kitaplık bir listede books[5] çağırırsan hata alırsın. try { print(books[5].title); } catch (e) { print("kitap bulunamadı"); } ile hatayı yakalar, kullanıcıya nazik mesaj verirsin. Bu, gerçek uygulamaların dayanıklı olmasını sağlar; beklenmeyen durumlar çöküş değil nazik geri dönüş olur.
try/catch deseni
Bu projede try/catch'i şu durumda kullanırız: kullanıcı bir kitap numarası ister, numara listede yoksa RangeError fırlar. catch bunu yakalar ve "kitap bulunamadı" yazar. Böylece program kitap yoksa da çalışmaya devam eder.
İyi bir uygulama, hataya dayanıklıdır. try/catch'in yanında bazen açık bir if (indeks < books.length) kontrolü de yapılır; bu, hatayı önceden önler. Hangisini seçeceğin duruma bağlıdır. try/catch daha genel; if denetimi daha açık. Bu derste try/catch'i deneyeceğiz.
Uygulama Hata yakalanan erişim
Aşağıdaki kodda Library ve Book sınıfları ile iki kitaplık bir liste zaten tanımlı. try bloğu içinde print(books[5].title) çağır; bu, liste dışı indeks hatası fırlatır. catch (e) bloğunda print("kitap bulunamadı") yazdır. Böylece program çokmek yerine mesaj verir.
Örnek çözümü göster
class Library {
String name;
Library(this.name);
void info() {
print("Kütüphane: $name");
}
}
class Book {
String title;
Book(this.title);
}
void main() {
final lib = Library("Şehir");
lib.info();
final b = Book("Suç ve Ceza");
print("Yeni kitap: ${b.title}");
final books = <Book>[Book("Suç ve Ceza"), Book("Sefiller")];
print("Sayı: ${books.length}");
print("İlk: ${books[0].title}");
try {
print(books[5].title);
} catch (e) {
print("kitap bulunamadı");
}
}
Kendini test et
-
Hata yönetimini eşleştir
- RangeError
- indeks dışı erişim
- try
- riskli kodu taşır
- catch
- hatayı yakalar
- print
- mesajı yazar
-
try bloğundan çıkış ne zaman olur?
try {
print(books[5].title);
} catch (e) {
print("yok");
}
- Hata fırlatılınca
- print çalışınca
- main başlayınca
- hiçbir zaman
Cevabı göster
hiçbir zaman — try içinde hata fırlatılınca catch'e geçilir.
-
catch bloğu
try {
print(books[5].title);
} ____ (e) {
print("kitap yok");
}
Cevabı göster
try {
print(books[5].title);
} catch (e) {
print("kitap yok");
}
Sıradaki ders: Birleştirme