CodeBlanks Logo Icon CodeBlanks

Stream transformer

StreamTransformer ile dönüştürme öğrenirsin.

StreamTransformer

StreamTransformer, bir stream'u başka bir stream'a dönüştüren soyutlamadır. Her öğeyi map'ler, filtreler, gruplayabilir ya da zamanlamasını değiştirebilir.

En basit dönüşüm .map(fn)'dir: her öğeyi fn ile değiştirir. .where(test) filtreler, .take(n) ilk n öğeyi alır.

Daha karmaşık dönüşümler için StreamTransformer.fromHandlers ile özel transformer yazılır. Bu, akış tabanlı veri işleme hatlarının (pipeline) temelidir.

Pipeline kurma

Birden çok transformer zincirlenebilir: s.where((x) => x > 0).map((x) => x * 2).take(3). Her adım yeni bir stream döndürür; veri sondan geriye doğru akmaz.

Zincirin sonunda bir sonlandırıcı (terminal) opsiyonu gelir: forEach, listen, toList, first. Bu çağrı stream'u tüketir.

Transformer'lar tembel'dir: sonlandırıcı çağrılana kadar veri akmaz. Bu, gereksiz hesabı önler.

Uygulama map ile iki katına çıkar

main'i async yap. var s = Stream.fromIterable([1, 2, 3]); ekle. await s.map((x) => x * 2).forEach(print); ekle.

Başlangıç kodu

main.dart
void main() {
  // async yap; [1,2,3] stream'ı oluştur; map ile iki katına çıkar; forEach ile yazdır
}

Örnek çözüm

main.dart
void main() async {
  var s = Stream.fromIterable([1, 2, 3]);
  await s.map((x) => x * 2).forEach(print);
}

Beklenen çıktı

2
4
6

Soru ve cevaplar

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

1 Her öğeyi dönüştür

Soru
var t = s.____((x) => x * 2);
Cevap
var t = s.map((x) => x * 2);

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

2 Hangisi bir StreamTransformer'dır?

  • .toList()
  • .map(fn) Doğru cevap
  • .length
  • .toString()

Açıklama: map bir stream'u başka bir stream'a dönüştürür.

3 Operatörleri eşleştir

Kavram Anlamı
.map(fn) Dönüştür
.where(test) Filtrele
.take(n) İlk n öğe
.forEach(fn) Tüket

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