Flutter开发Dart极速入门 (生成器)

Dart入门系列:
Flutter开发Dart极速入门 (基本类型)
Flutter开发Dart极速入门 (变量)
Flutter开发Dart极速入门 (函数)
Flutter开发Dart极速入门 (操作符与流程控制语句)
Flutter开发Dart极速入门 (异常)
Flutter开发Dart极速入门 (类和对象)
Flutter开发Dart极速入门 (泛型)
Flutter开发Dart极速入门 (异步详解)
Flutter开发Dart极速入门 (生成器)
Flutter开发Dart极速入门 (库的使用)
Flutter插件化开发注意事项(Packages与插件化开发)
Flutter在Android原生工程中的集成

文章目录

  • 生成器
    • 同步生成器 sync*
    • 异步生成器 async*
    • yield 与 yield*
    • 递归生成器

生成器

同步生成器 sync*

void main() {

  print('main start');

  Iterator iterator = syncGenerator(5).iterator;
  while (iterator.moveNext()) {
    print(iterator.current);
  }

  print('main end');
}

// 同步生成器
Iterable syncGenerator(int n) sync*{
  print('start');
  int i = n;
  while(i > 0) {
    print('generator: $i');
    yield i-- ;	// yield 产出结果
  }
  print('end');
}

异步生成器 async*

void main() {

  print('main start');

  StreamSubscription subscription = asyncGenerator(5).listen(null);
  subscription.onData((handleData) {
    print(handleData);
    if (handleData > 1) {	// 异步生成器可以被中断
      subscription.pause();
    }
  });
//  StreamSubscription subscription = asyncGenerator(5).listen((value) {
//    print('sub $value');
//  });

  print('main end');
}

// 异步生成器
Stream asyncGenerator(int n) async*{
  print('start');
  int i = 0;
  while(i < n){
    print('generator: $i');
    yield i++;	// yield 产出结果
  }
  print('end');
}

yield 与 yield*

  • yield 直接输出结果
  • yield* 输出一个函数指针, 也就是说实际将会执行yield* 所表示的函数

递归生成器

void main() {

  print('main start');
  // 递归生成器
  Iterator iterator = getSyncRecursiveGenerator(5).iterator;
  while (iterator.moveNext()){
    print(iterator.current);
  }

  print('main end');
}

// 递归生成器
Iterable getSyncRecursiveGenerator(int n) sync* {
  if (n > 0) {
    yield n;	// yield 产出结果
    yield* getSyncRecursiveGenerator(n - 1);	// yield* 调用函数
  }
}

你可能感兴趣的:(Flutter)