Dart Academy · レッスン

ストリームの変換:map、where、take

イベント列の形を変える

レッスン 3/413 ステップ

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

Streamは変換できる

リストと同じように、ストリームにもイベントの形を便利に変えるメソッドがあります。元のストリームに触れずに、ストリームをtransformして新しいストリームを作成できます。

mapで各イベントを変換する

mapメソッドはすべてのイベントに関数を適用し、その結果を発行します。1つの値のストリームを、変換後の値のストリームに変えます。

final doubled = numbers.map((n) => n * 2);

mapは個数を維持する

mapではイベントの数は変わらず、形だけが変わります。入力が3つなら、必ず出力も正確に3つになります。✨

Stream.fromIterable([1, 2, 3])
    .map((n) => 'Item $n');

whereでイベントをフィルタリングする

whereメソッドは、テストに合格したイベントだけを残します。falseを返したものは、新しいストリームから取り除かれます。

final evens = numbers.where((n) => n.isEven);

whereでStreamを小さくできる

mapとは異なり、whereは受け取った数より少ないイベントを発行することがあります。テストに合格するものがなければ、結果のストリームは空のままです。

takeで個数を制限する

takeメソッドは最初のn個のイベントだけを発行し、その後Listenを停止します。長いストリームから少数の値だけが必要な場合に最適です。🎯

final firstThree = bigStream.take(3);

takeは早期にキャンセルする

n個のイベントを届けると、takeはソースへのサブスクリプションを自動的にキャンセルします。元のストリームは、あなたに対するイベントの生成を停止します。

変換を連結する

これらのメソッドは新しいストリームを返すため、メソッドをchainできます。チェーンは左から右へ、フィルタリング、変換、制限の順に読みます。

numbers
    .where((n) => n.isEven)
    .map((n) => n * 10)
    .take(2);

本質的にLazy

変換はlazyです。Listenするまで何も実行されません。チェーンはイベントが到着したときに、1つずつ処理します。

その他のツール:takeWhileとskip

基本の3つ以外にも、takeWhileはテストに失敗するまで発行し、skipは最初のn個のイベントを無視します。同じようにメソッドを連結できます。

stream.skip(2).takeWhile((n) => n < 100);

結果を利用する

変換後は、await forまたはListenを使って新しいストリームを読み取ります。発行される各値は、すでにチェーン全体を通過しています。

await for (final v in transformed) {
  print(v);
}

簡単な確認

イベント数を減らせるメソッドはどれですか?

まとめ

mapで変換し、whereでフィルタリングし、takeで制限することで、ストリームの形を変えられます。いずれもListenするまで遅延実行され、連結も可能です。🎉

無料で開始

AI チューターと学ぶ Dart — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
30
レッスン
120

よくある質問

「ストリームの変換:map、where、take」レッスンは無料ですか?

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

「ストリームの変換:map、where、take」で何を学びますか?

イベント列の形を変える ブラウザで直接実行するハンズオンコードでDart Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「ストリームの変換:map、where、take」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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