【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part36 Dartの特徴

基礎 から 学ぶ Flutter 」という書籍で  学習 したことを ブログでアウトプットしていこうと思います。今回は Dart編 ( part36 )です。

前回

【 Flutter 】Flutter を 基礎 から 学習 ( Dart編 ) part35 Dartの特徴

今回もジェネレーターについての学習です。

Dartの特徴

ジェネレーター

前回のIteratorを踏まえ、本題のジェネレータについて学習を進めていきます。

同期ジェネレータ

実装して確認してみました。

// ★戻り値はIterableです。<>はの中はジェネリクス・・・ですよね。
// 引数定義の直後に ★sync* キーワードを記述します。
Iterable<int> getRange(int start, int end) sync* {
  print('called getRange()');
  for (int i = start; i <= end; i++) {
    print ('before yield');
    // returnの代わりに yield というキーワードを使います。
    // この処理を実行した直後、「この関数」の時間が一時停止します。
    yield i;
    
    // 呼び出し側から次の要素リクエストがあると、処理はここからまた動き始めます。
    print('after yield');
    print('\n');
  }
}
void main()  {
  final numbers = getRange(1, 10);
  
  for (int val in numbers) {
    print('before print val');
    print(val);
    print('after print val');
  }
}

returnの代わりにyield、そしてyieldの処理後はこの関数は一時停止します。

実行結果は書籍で紹介されている通りです。

called getRange()
before yield
before print val
1
after print val
after yield

before yield
before print val
2
after print val
after yield

before yield
before print val
3
after print val
after yield
・・・

最後に

初めて実装するかたはとても結果に驚いてしまうのではないでしょうか。

今日はここまで!