CodeBlanks Logo Icon CodeBlanks

Stream transformation

map ve where ile Stream dönüştürme öğrenirsin.

Stream dönüşümü

Stream'ler map ve where metotlarıyla dönüştürülebilir. map her olayı dönüştürür; where koşula uyan olayları geçirir. Bu metotlar yeni bir Stream döndürür.

Örnek: var filtered = stream.where((n) => n.isEven);. Bu, yalnızca çift sayı olaylarını geçirir. var doubled = filtered.map((n) => n * 2); ise her olayı ikiye katlar.

Dönüştürülmüş Stream'i dinlemek için await for kullanırsın. Zincirleme mümkündür: stream.where(...).map(...). Her dönüşüm tembel çalışır.

Zincirleme dönüşüm

Stream dönüşümleri zincirlenebilir. stream.where(...).map(...) yazarak tek akışta birden çok dönüşüm yaparsın. Her dönüşüm bir sonrakının girdisi olur.

Örnek: [1, 2, 3, 4] akışı üzerinde önce where ile çiftleri al (2, 4), sonra map ile ikiye katla (4, 8). Sonuç: 4, 8. await for ile dinlersin.

Zincirleme, veriyi adım adım işlemenin okunaklı yoludur. Her adım tek bir sorumluluğa sahiptir; kod anlaşılır kalır.

Uygulama Stream'i süz ve dönüştür

void main() async zaten yazılı. Stream.fromIterable([1, 2, 3, 4]) zaten oluşturuldu. Önce .where((n) => n.isEven) ile çiftleri süz, sonra .map((n) => n * 2) ile ikiye katla. await for ile sonuçu dinle ve print ile yazdır.

Başlangıç kodu

main.dart
void main() async {
  var stream = Stream.fromIterable([1, 2, 3, 4]);
  // .where ile çiftleri süz, .map ile ikiye katla, await for ile yazdır
}

Örnek çözüm

main.dart
void main() async {
  var stream = Stream.fromIterable([1, 2, 3, 4]);
  var filtered = stream.where((n) => n.isEven);
  var doubled = filtered.map((n) => n * 2);
  await for (var n in doubled) {
    print(n);
  }
}

Beklenen çıktı

4
8

Soru ve cevaplar

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

1 Dönüşüm metotlarını eşleştir

Kavram Anlamı
.where((n) => n.isEven) Çiftleri süzme
.map((n) => n * 2) İkiye katlama
await for Sonucu dinleme
print(n) Olayı yazdırma

2 stream.where(...) ne döndürür?

main.dart
var s = Stream.fromIterable([1, 2, 3]);
var f = s.where((n) => n.isEven);
  • Bir liste
  • Yeni bir Stream Doğru cevap
  • Bir Future
  • void

Açıklama: where yeni bir Stream döndürür.

3 map çağrısı

Soru
var filtered = stream.where((n) => n.isEven);
var doubled = filtered.____((n) => n * 2);
Cevap
var filtered = stream.where((n) => n.isEven);
var doubled = filtered.map((n) => n * 2);

Açıklama: map her olayı dönüştürür.

Orta seviye bölümündeki tüm dersler