11. Dart 函数、箭头函数、匿名函数、立即执行函数及闭包讲解

目录
文章目录隐藏
  1. 一、函数的基本使用
  2. 二、箭头函数
  3. 三、匿名函数
  4. 四、立即执行函数
  5. 五、闭包

一、函数的基本使用

1、函数的声明和使用

建议所有函数都声明返回类型,没有返回值声明 void 类型。

void main() {
  void printTitle(String title) {
    print('The title : ${title.toString()}');
  }

  String getName(String firstName, String lastName) {
    String res = 'my name is ${firstName}-${lastName}';
    printTitle(res);
    return res;
  }

  int getSum(int num) {
    int sum = 0;
    for (int i = 1; i <= num; i++) {
      sum += i;
    }
    return sum;
  }

  printTitle(getName('技术博客', 'mybj'));
  print(getSum(6));
  print(getSum(100));
  print(getSum(50));
}

运行结果:

The title : my name is 技术博客-mybj
The title : my name is 技术博客-mybj
21
5050
1275

2、可选参数 和 默认参数

dart 中声明可选参数,需要在参数列表声明 List 格式的参数列表,表明是可选的。

如果要声明参数的默认值,可以直接在参数后面赋值。

void main() {
  // 可选参数 & 默认参数
  void printInfo(String name, [int? age, String sex = '男']) {
    if (age == null) {
      print('my name is ${name}, sex is ${sex}');
    } else {
      print('my name is ${name}, age is ${age}, sex is ${sex}');
    }
  }

  printInfo('mybj');
  printInfo('mybj', 20);
  printInfo('mybj', 20, '女');
}

运行结果:

my name is mybj, sex is 男
my name is mybj, age is 20, sex is 男
my name is mybj, age is 20, sex is 女

3、命名参数

dart 可以指定参数名称,而不需要传入一个 Map 才能指定名称,这点非常实用,在 flutter 中大多数 widegt 的构造方法中,使用的是命名参数。

// 命名参数
void printInfo2(String name, {int age, String sex = '男'}) {
  if(age == null) {
    print('my name is ${name}, sex is ${sex}');
  } else {
    print('my name is ${name}, age is ${age}, sex is ${sex}');
  }
}

在 Flutter 中如果参数都使用命名参数,要指定某个参数是必须传递的,则需要通过 @required 注解:

class Test {
  final String name;
  Test({
    @required this.name,
  });
}

4、函数作为参数

executeFunction(fn, [args]) {
  if (fn != null) {
    return fn(args);
  }
}

二、箭头函数

void main() {
  List l1 = ['前端', '后端'];

  l1.forEach((item) {
    print(item);
  });

  l1.forEach((item) => print(item));
}

箭头函数只能有一行,可以省略大括号。

map 方法中使用箭头函数:

void main() {
  List l1 = [1, 2];
  var l2 = l1.map((item) {
    return item % 2 == 0 ? item * 2 : item;
  });
  print(l2.toList()); // [1, 4]

  var l3 = l1.map((item) => item % 2 == 0 ? item * 2 : item);
  print(l3); // (1, 4)
}

三、匿名函数

void main() {
  Function getInfo = (String name, int age, [String sex = '男']) {
    print('My name is ${name}, my age is ${age}, my sex is ${sex}');
  };

  getInfo('mybj', 30);
}

运行结果:

My name is mybj, my age is 30, my sex is 男

四、立即执行函数

void main() {
  // 立即执行方法
  ((name) {
    print('my name is ${name}');
  })('mybj');
}

运行结果:

my name is mybj

五、闭包

void main() {
  // 闭包
  Function getA() {
    int a = 0;
    return () {
      a++;
      print(a);
    };
  }

  Function b = getA();
  b();
  b();
}

运行结果:

1
2

以上就是关于 Dart 函数、箭头函数、匿名函数、立即执行函数及闭包讲解的全部内容,下接我们主要讲 Dart 类 Class。

「点点赞赏,手留余香」

0

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。
码云笔记 » 11. Dart 函数、箭头函数、匿名函数、立即执行函数及闭包讲解

发表回复