小菜鸡开始学习flutter之八

147 阅读1分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情

今日目标

今天的学习目标是学习Dart中的函数的箭头函数,匿名函数,闭包等相关知识

箭头函数

List list = [1,2,3];
list.forEach((value) => print(value));
print('-------');
list.forEach((value) => {
  print(value * 2),
  print('value is $value')
});

image.png 箭头函数后直接跟方法体,这个时候只能写一行表示,也阔以像第二种写法,这个时候就是一个箭头函数,箭头函数内一般也是只可以写一行表达式,多行的话通过,号区分

来个小练习: 打印出1到之间的全部偶数

bool isEven (int num) {
      return num % 2 == 0;
  }

  printEven (int n) {
      for (int i=1;i<=n;i++) {
          if (isEven(i)) {
            print(i);
          }
      }
  }
  printEven(10);

image.png 如上,首先我们定义了一个函数来判断数是否为偶数。在定义一个函数来使用前面的定义好的函数来判断数是否偶数,是偶数就打印出数。

自执行方法

所谓的自执行方法就是定义了一个方法,不需要主动调用,它自己就会跟随程序的执行而执行

((){
    print('这是一个自执行方法');
})();

image.png

如上的写法就是一个自执行方法,可以看到并没有主动调用这个函数,控制台也输出了对应的内容

递归

int total = 1;
int fn(int n) {
    total *= n;
    if (n == 1) {
      return total;
    }
    return fn(n - 1);
};
int res = fn(5);
print('最终结果____$res'); 

image.png 上面我们实现了一个求1到n的累乘的结果的递归函数。
Dart里的递归和js里的实现思路是一样的也是不断调用函数本身直到条件不符合,结束递归。

闭包

先了解两个基础概念
1.全局变量: 全局变量常驻内存,全局变量会造成污染全局
2.局部变量: 局部变量不常驻内存,会被垃圾回收机制自动回收掉,不会对全局变量造成污染。

闭包正是利用了局部变量这一特性,避免我们的函数内的变量被直接暴露出来,但是又可以让变量常驻内存中。

fn(){
    int a = 1;
    return () {
      a++;
      print(a);
    };
  };
  var bibao = fn();
  bibao();
  bibao();
  var bibao2 = fn();
  bibao2();

image.png 上面的fn就是一个闭包函数,变量a常驻内存中,但是bibao和bibao2中的a不会互相影响。

Ending

持续学习,加油,如有不对的地方还请指正,谢谢~~