CodeBlanks Logo Icon CodeBlanks

asyncExpand

asyncExpand ile Stream zincirleme öğrenirsin.

asyncExpand

asyncExpand her Stream olayını yeni bir Stream'a açar ve sonuçları tek akışta birleştirir. Bu, flat map olarak da bilinir. Her olay birden çok alt olay üretebilir.

Örnek: stream.asyncExpand((n) => Stream.fromIterable([n, n * 10])). Burada her sayı iki olay üretir: kendisi ve on katı. [1, 2, 3] girişi [1, 10, 2, 20, 3, 30] çıktısı verir.

asyncExpand her olayı bir Stream'a dönüştürür; bu Stream'ler art arda birleştirilir. Bu, her olaydan birden çok sonuç üretmek için kullanılır.

Flat map mantığı

asyncExpand fonksiyonel programlamadaki flat map işleminin Stream karşılığıdır. Her olay bir Stream'a dönüştürülür; bu Stream'ler art arda birleştirilir.

Örnek: [1, 2, 3] akışı ve (n) => Stream.fromIterable([n, n * 10]) dönüşümü. 1 → [1, 10], 2 → [2, 20], 3 → [3, 30]. Birleşim: [1, 10, 2, 20, 3, 30].

Bu yapı, bir olaydan birden çok sonuç türetmek için kullanılır. Örneğin her kullanıcı için o kullanıcının tüm siparişlerini bir akışta toplamak gibi.

Uygulama asyncExpand ile aç

void main() async zaten yazılı. Stream.fromIterable([1, 2, 3]) zaten oluşturuldu. .asyncExpand((n) => Stream.fromIterable([n, n * 10])) ile her olayı iki elemanlı akışa aç. 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]);
  // .asyncExpand ile her sayıyı iki elemanlı akışa aç, await for ile yazdır
}

Örnek çözüm

main.dart
void main() async {
  var stream = Stream.fromIterable([1, 2, 3]);
  var expanded = stream.asyncExpand((n) => Stream.fromIterable([n, n * 10]));
  await for (var n in expanded) {
    print(n);
  }
}

Beklenen çıktı

1
10
2
20
3
30

Soru ve cevaplar

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

1 asyncExpand her olayı neye dönüştürür?

main.dart
stream.asyncExpand((n) =>
  Stream.fromIterable([n, n * 10]));
  • Bir sayıya
  • Bir Future'a
  • Yeni bir Stream'a Doğru cevap
  • void'e

Açıklama: asyncExpand her olayı yeni bir Stream'a dönüştürür ve birleştirir.

2 asyncExpand parçalarını eşleştir

Kavram Anlamı
(n) => Stream.fromIterable(...) Olaydan Stream
.asyncExpand(...) Birleştirme çağrısı
[1, 10, 2, 20] Sonuç akışı
await for Dinleme

3 asyncExpand çağrısı

Soru
var expanded = stream.____((n) => Stream.fromIterable([n, n * 10]));
Cevap
var expanded = stream.asyncExpand((n) => Stream.fromIterable([n, n * 10]));

Açıklama: asyncExpand her olayı Stream'a açar.

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