CodeBlanks Logo Icon CodeBlanks

on clause

on ile belirli istisna türü yakalamayı öğrenirsin.

on clause

catch tüm hataları yakalar. Bazen yalnızca belirli bir türü yakalamak istersin. Bunun için on kullanılır. on FormatException catch (e) { ... } yalnızca FormatException türündeki hatayı yakalar; diğerleri yukarı yayılır.

Tipik kullanım: try { int.parse(girdi); } on FormatException { print("sayı değil"); } on Exception catch (e) { print("diğer hata: $e"); }. Burada her on farklı bir türü yakalar ve farklı mesaj verir. catch (e) adını vermeden de kullanılabilir; o zaman nesneye erişemezsin. on ile türü, catch (e) ile nesneyi alırsın.

Uygulama Sıra sende: türe göre yakala

try bloğu içinde int.parse'i sayı olmayan bir dizeyle çağır. on FormatException ile print("sayı değil") yazdır. Ardından on Exception catch (e) ile genel hata durumunda print(e) yazdır. Böylece farklı türler farklı mesaj verir.

Başlangıç kodu

main.dart
void main() {
  // try ile sayıya çevirmeyi dene
  // özel tür için "sayı değil" yazdır
  // genel tür için hatayı yazdır
}

Örnek çözüm

main.dart
void main() {
  try {
    int.parse("elma");
  } on FormatException {
    print("sayı değil");
  } on Exception catch (e) {
    print(e);
  }
}

Beklenen çıktı

sayı değil

on ve catch farkı

on FormatException yalnızca FormatException yakalar. catch (e) ise her şeyi yakalar. İkisini birlikte kullanabilirsin: on FormatException catch (e). Burada hem türü belirtirsin hem de nesneyi e'ye alırsın. Sadece on FormatException yazarsan nesneye erişemezsin.

Birden çok on yan yana yazılabilir; sırasıyla denenebilir. İlk eşleşen çalışır. on FormatException { ... } on Exception { ... } sırası önemlidir; çünkü FormatException da Exception'dır, bu yüzden daha özele öncelik verilmelidir. finally bloğu bu yapının sonuna da eklenebilir.

Soru ve cevaplar

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

1 on FormatException

Soru
try {
  int.parse("elma");
} ____ FormatException {
  print("sayı değil");
}
Cevap
try {
  int.parse("elma");
} on FormatException {
  print("sayı değil");
}

Açıklama: on ile belirli tür yakalanır.

2 Birden çok on yan yana yazılırsa ne olur?

main.dart
try {
  isle();
} on FormatException {
  ...
} on Exception {
  ...
}
  • İlk eşleşen çalışır Doğru cevap
  • Her blok çalışır
  • Sadece son çalışır
  • Hata verir

Açıklama: İlk eşleşen on bloğu çalışır.

3 on/catch eşleştir

Kavram Anlamı
on FormatException yalnızca bu tür
catch (e) tüm türler
on ... catch (e) tür + nesne
finally her zaman

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