CodeBlanks Logo Icon CodeBlanks

Zone

Zone ile context yönetimini öğrenirsin.

Zone nedir?

Zone, Dart'ın yürütme ortamı soyutlamasıdır. Her Future, microtask ve callback bir Zone içinde çalışır. Varsayılan Zone Zone.root'tür.

Zone.fork ile alt zone oluşturulur. Alt zone, hata yakalama, görev sarma (intercept) ve özel davranış eklemek için kullanılır.

Örnek: runZoned(() => ...) gövdeyi yeni bir zone'da çalıştırır. İçeride fırlatılan hata zone'un hata işleyicisine gider.

Zone ile hata yakalama

runZoned'a onError parametresi verilirse, gövde içinde fırlatılan yakalanmamış hatalar bu işleyiciye gider. Bu, async kodunda global hata yakalama için temel mekanizmadır.

Örnek: runZoned(() { throw 'hop'; }, onError: (e, s) => print('hata: $e'));. Gövde hata fırlatır, onError çağrılır, program çökmez.

Zone olmadan Future içindeki hata yakalanmazsa program sonlanır. Bu yüzden async kodunu zone'a sarmak iyi bir uygulamadır.

Uygulama runZoned ile gövde çalıştır

main içinde runZoned(() { print('zone içi'); }); çağrısı ekle. Sonra print('dış'); ekle.

Başlangıç kodu

main.dart
void main() {
  // runZoned ile gövde çalıştır; sonra 'dış' yazdır
}

Örnek çözüm

main.dart
void main() {
  runZoned(() {
    print('zone içi');
  });
  print('dış');
}

Beklenen çıktı

zone içi
dış

Soru ve cevaplar

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

1 Yeni zone başlat

Soru
____(() { print('zone içi'); });
Cevap
runZoned(() { print('zone içi'); });

Açıklama: runZoned gövdeyi yeni bir zone'da çalıştırır.

2 Zone kavramları

Kavram Anlamı
Zone.root Varsayılan zone
Zone.fork Alt zone
runZoned Gövde çalıştırma
onError Hata işleyici

3 runZoned ne işe yarar?

  • Yeni bir Isolate başlatır
  • Event loop'u durdurur
  • Yeni bir zone'da gövde çalıştırır Doğru cevap
  • Future'ı senkron yapar

Açıklama: runZoned gövdeyi yeni bir zone'da çalıştırır.

İleri seviye bölümündeki tüm dersler