kmizuの日記

プログラミングや形式言語に関係のあることを書いたり書かなかったり。

Hello, Dart (1) - フィボナッチ数列

Flutterを触ってみたくなったので、ついでにDartの勉強も始めることにした。手始めに、フィボナッチ数列を求める Stream を作って、そっから最初の10要素を取り出して表示するというプログラム。

import 'dart:async';
import 'dart:core';

main() async {
  var fibs = await fib().take(10).toList();
  print(fibs);
}

Stream<BigInt> fib() async* {
  var a = new BigInt.from(0);
  var b = new BigInt.from(1);                                                   
  while(true) {
    yield a;
    var c = a + b;
    a = b;
    b = c;
  }
}
$ dart fibs.dart
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Stream#toList() は非同期に処理が完了する Future<List<T>> を返すのだけど、 await で結果を待って List<T> に変換することができるようだ。