Menu
Coddy logo textTech

まとめ - Data Fetcher

CoddyのDartジャーニー「オブジェクト指向プログラミング」セクションの一部 — レッスン 81/110。

challenge icon

チャレンジ

簡単

この章のすべての非同期OOPコンセプトを統合した DataFetcher クラスを作成しましょう!非同期初期化、個別のアイテムを取得するための非同期メソッド、そして時間の経過とともに複数の結果を配信するストリームを使用するデータサービスを作成します。

コードを2つのファイルに整理します:

  • data_fetcher.dart: リモートソースからのデータ取得をシミュレートする DataFetcher クラスを作成します。クラスには以下を含める必要があります:
    • データの取得元を保存する source という名前の final String フィールド
    • ソースを初期化するプライベートコンストラクタ
    • 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!' を表示する
}

オブジェクト指向プログラミングのすべてのレッスン