まとめ - Data Fetcher
CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 81/110。
チャレンジ
簡単この章のすべての非同期OOPコンセプトを統合した DataFetcher クラスを作成しましょう!非同期初期化、個別のアイテムを取得するための非同期メソッド、そして時間の経過とともに複数の結果を配信するストリームを使用するデータサービスを作成します。
コードを2つのファイルに整理します:
data_fetcher.dart: リモートソースからのデータ取得をシミュレートするDataFetcherクラスを作成します。クラスには以下を含める必要があります:- データの取得元を保存する
sourceという名前の finalStringフィールド - ソースを初期化するプライベートコンストラクタ
Future<DataFetcher>を返す static な非同期ファクトリメソッドconnect(String sourceName)。100ミリ秒の接続遅延をシミュレートし、提供された名前にソースが設定された新しいインスタンスを返しますFuture<String>を返す非同期メソッドfetchItem(int id)。50ミリ秒の遅延をシミュレートし、[source]-Item-[id]という形式の文字列を返しますStream<String>を返すストリームジェネレータメソッドfetchMultiple(int count)。これは、ID 1からcount(それ自体を含む)までのアイテムを、各アイテムに対してfetchItemメソッドを使用して yield する必要があります(各 fetch を await してから yield します)
- データの取得元を保存する
main.dart: データフェッチャーをインポートし、3つの非同期パターンがすべて連携して動作することを示します:Connecting to data source...と出力します- 非同期ファクトリを使用して、
CloudDBという名前のソースに接続します - フェッチャーの source フィールドを使用して
Connected to [source]と出力します - 空行を出力します
Fetching single item:と出力します- ID
42のアイテムを取得して出力します - 空行を出力します
Fetching multiple items:と出力しますawait forを使用してfetchMultiple(3)を反復処理し、各アイテムを出力します- 空行を出力します
All operations complete!と出力します
このチャレンジでは、初期化のための static な非同期ファクトリパターン、単一操作のための通常の非同期メソッド、および複数の結果をストリーミングするための async* と yield を組み合わせます。ストリームメソッドが内部で他の非同期メソッドを呼び出せることに注目してください!
期待される出力:
Connecting to data source...
Connected to CloudDB
Fetching single item:
CloudDB-Item-42
Fetching multiple items:
CloudDB-Item-1
CloudDB-Item-2
CloudDB-Item-3
All operations complete!自分で試してみよう
import 'data_fetcher.dart';
void main() async {
// TODO: 'Connecting to data source...' を表示する
// TODO: async factory を使用して 'CloudDB' という名前のソースに接続する
// TODO: fetcher の source フィールドを使用して 'Connected to [source]' を表示する
// TODO: 空行を表示する
// TODO: 'Fetching single item:' を表示する
// TODO: ID 42 のアイテムを取得して表示する
// TODO: 空行を表示する
// TODO: 'Fetching multiple items:' を表示する
// TODO: 'await for' を使用して fetchMultiple(3) を反復処理し、各アイテムを表示する
// TODO: 空行を表示する
// TODO: 'All operations complete!' を表示する
}
オブジェクト指向プログラミングのすべてのレッスン
4Null Safety
Null Safety 入門Nullable と Non-Nullable? 演算子と ! 演算子late キーワードと Null SafetyNull-Aware 演算子クラスにおける Null Safetyまとめ:ユーザープロフィールシステム10コレクションとジェネリクス
List, Set, Map の概要型安全なコレクションジェネリッククラスジェネリックメソッドジェネリクスの制約Iterable と Iteratorまとめ:ジェネリックなストレージ12非同期 OOP
Future と async/awaitStream の基礎Stream Controller非同期コンストラクタクラスメソッドにおける非同期処理まとめ - Data Fetcher