0Pricing
Dart Academy · レッスン

単一購読ストリームとブロードキャストストリーム

複数のリスナーに適したストリームを選ぶ

「単一購読ストリームとブロードキャストストリーム」はCoddyKit上の無料Dart Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはDart Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Dart Academyコースには全4レッスンが含まれています。

2種類のStream

Dartのストリームには、single-subscriptionとbroadcastの2種類があります。どちらを選ぶかは、必要なListenerの数によって決まります。

Single-Subscription Stream

single-subscription streamでは、その存続期間を通してListenerを正確に1つだけ登録できます。デフォルトの種類で、ファイルの読み取りのような一度きりのシーケンスに適しています。📄

Listenは一度だけ

single-subscription streamを2回Listenしようとすると、DartはStateErrorをスローします。ストリームはすでに唯一のListenerが登録されていることを記録しています。

final s = Stream.fromIterable([1, 2]);
s.listen(print);
s.listen(print); // throws StateError

Listenされるまでバッファする

single-subscription streamは辛抱強く待機します。何かがListenを開始するまでイベントを生成しないため、値が失われることはありません。

Broadcast Stream

broadcast streamでは、同時に多くのListenerが購読できます。アクティブな各Listenerは、発生した同じイベントを受け取ります。📡

Broadcastに変換する

asBroadcastStreamを呼び出すと、single-subscription streamを共有可能なストリームに変換できます。これで複数のListenerを登録できます。

final shared = source.asBroadcastStream();
shared.listen(print);
shared.listen((v) => log(v));

遅れてListenするとイベントを逃す

Broadcast streamはバッファリングしません。lateに購読したListenerが受け取れるのは、その時点以降に発行されたイベントだけで、それ以前のイベントは受け取れません。

Controllerで種類を選ぶ

StreamControllerはデフォルトでsingle-subscription streamを作成します。複数のListenerが必要な場合は、broadcastコンストラクターを使います。

final ctrl = StreamController<int>.broadcast();
ctrl.stream.listen(print);

Singleを使う場面

データが1つのconsumerに一度だけ流れる場合は、single-subscription streamを使います。たとえば、ネットワークレスポンスのバイト列やファイルの読み取りなどです。

Broadcastを使う場面

アプリの複数の部分が関心を持つ継続的なイベントには、broadcast streamを選びます。ボタンのタップやセンサーのリアルタイム更新などがその例です。

Listenする前に確認する

どちらの種類か分からない場合は、isBroadcastプロパティで確認できます。これにより、single streamでの二重ListenによるStateErrorを防げます。

if (!stream.isBroadcast) {
  // only one listener allowed
}

簡単な確認

多くのListenerに適したストリームはどれですか?

まとめ

Single-subscription streamは1つのListenerに対応し、読み取られるまでバッファします。一方、broadcast streamは多くのListenerに対応しますが、過去のイベントはスキップします。Listenerの数で選びましょう。🎉

よくある質問

「単一購読ストリームとブロードキャストストリーム」レッスンは無料ですか?

はい。「単一購読ストリームとブロードキャストストリーム」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Dart Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Dart Academyコースには全4レッスンが含まれています。

「単一購読ストリームとブロードキャストストリーム」で何を学びますか?

複数のリスナーに適したストリームを選ぶ ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Dart Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのDart Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「単一購読ストリームとブロードキャストストリーム」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このDart Academyレッスンでコードを書いて実行できますか?

はい。すべてのDart Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. await forでリッスンする
  2. 単一購読ストリームとブロードキャストストリーム
  3. ストリームの変換:map、where、take
  4. async*でストリームを作成する
← Dart Academyに戻る