Hata yönetimi
- Dart kursu
- Başlangıç
- Ders 115/116
- 6 dk
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.
Başlangıç kodu
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 ile 5. indekse eriş; catch ile mesaj yazdır
}Örnek çözüm
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ı");
}
}Beklenen çıktı
Kütüphane: Şehir Yeni kitap: Suç ve Ceza Sayı: 2 İlk: Suç ve Ceza kitap bulunamadı
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Hata yönetimini eşleştir
| Kavram | Anlamı |
|---|---|
RangeError |
indeks dışı erişim |
try |
riskli kodu taşır |
catch |
hatayı yakalar |
print |
mesajı yazar |
2 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 Doğru cevap
Açıklama: try içinde hata fırlatılınca catch'e geçilir.
3 catch bloğu
try {
print(books[5].title);
} ____ (e) {
print("kitap yok");
}
try {
print(books[5].title);
} catch (e) {
print("kitap yok");
}
Açıklama: catch yazılır; ardından (e) parametresi ve blok gelir.