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*

void main() {

  print('main start');

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

  print('main end');
}

// 同步生成器
Iterable<int> 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<int> 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<int> getSyncRecursiveGenerator(int n) sync* {
  if (n > 0) {
    yield n;	// yield 产出结果
    yield* getSyncRecursiveGenerator(n - 1);	// yield* 调用函数
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值