Dart
DartDay 7

なぞの FutureOr

dart:async の の中に、 FutureOr という機能があるのだが、
使い方の解説も見ないでの、試して見た。

https://api.dartlang.org/stable/1.24.3/dart-async/FutureOr-class.html

import 'dart:async';

main() async {
  {
     int start = new DateTime.now().millisecondsSinceEpoch;
     for(int i=0;i<500;i++) {
       await doubleAsync(i);
     }
     int end = new DateTime.now().millisecondsSinceEpoch;
     print("#A# ${end -start}");
  }

  {
     int start = new DateTime.now().millisecondsSinceEpoch;
     for(int i=0;i<500;i++) {
       FutureOr f = doubleOr(i, m:1);
       if(f is Future) {
         await f;
       } 
     }
     int end = new DateTime.now().millisecondsSinceEpoch;
     print("#B# ${end -start}");
  }
 }

Future<int> doubleAsync(int i) async{
    return i+i;
}

int doubleSync(int i) {
    return i+i;
}

FutureOr<int> doubleOr(int i, {int m:0}) {
  if(m == 0) {
    return doubleAsync(i);
  } else {
    return doubleSync(i);
  }
}

https://dartpad.dartlang.org/ 
で試すと、結構速度が違う。

なんとなく

main() asyncOr {
  {
     int start = new DateTime.now().millisecondsSinceEpoch;
     for(int i=0;i<500;i++) {
       awaitOr doubleOr(i, m:1);
     }
     int end = new DateTime.now().millisecondsSinceEpoch;
     print("#A# ${end -start}");
  }

みたいに、かけたら良いのに.