Dart中的函数箭头函数、匿名函数、闭包等

main() {
  //箭头函数,箭头函数后面只能写一行代码
  List list = ["中国人", "美国人", "德国人"];
  list.forEach((value) => print(value));
  print("-----------------------------");
  list.forEach((value) => {print(value)});
  print("-----------------------------");

  List lists = [1, 2, 3, 4, 5];
  var newList = lists.map((value) => value > 2 ? value * 2 : value);
  print(newList.toList());

  print("-----------------------------");
  //函数的相互调用
  printNum(10);

  print("-----------------------------");
  //匿名方法
  getNum(2);
  print("-----------------------------");

  //自执行方法
  ((int n) {
    print(n);
    print("自执行方法");
  })(12);

  print("-----------------------------");

  //方法的递归
  print(fn(5));
  print("-----------------------------");


  //闭包:方法里面嵌套方法,并且返回方法,就形成了闭包(常驻内存,不污染全局)
  // 全局变量:全局变量常驻内存,污染全局
  // 局部变量:不常驻内存会被垃圾回收机制回收,不污染全局

  var m = method();
  m();
  m();
  m();

}

//闭包的写法
method() {
  var a = 1;
  return () {
    a++;
    print(a);
  };
}

var sum = 1;
int fn(int n) {
  if (n == 1) {
    return 1;
  }
  sum *= n;
  fn(n - 1);
  return sum;
}

//匿名方法
var getNum = (int value) {
  print(value);
};

void printNum(int n) {
  for (var i = 1; i < n; i++) {
    if (isEvenNum(i)) {
      print(i);
    }
  }
}

bool isEvenNum(int n) {
  if (n % 2 == 0) {
    return true;
  }
  return false;
}

输出结果:

[Running] dart "/Users/zhoujian/DartDemo/tempCodeRunnerFile.dart"
中国人
美国人
德国人
-----------------------------
中国人
美国人
德国人
-----------------------------
[1, 2, 6, 8, 10]
-----------------------------
2
4
6
8
-----------------------------
2
-----------------------------
12
自执行方法
-----------------------------
120
-----------------------------
2
3
4

[Done] exited with code=0 in 1.172 seconds

发布了272 篇原创文章 · 获赞 68 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/u014005316/article/details/104297282