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

一、函数的基本使用

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。

1. 本站所有免费资源来源于用户上传和网络,因此不包含技术服务请大家谅解!如有侵权请邮件联系客服!
2. 本站不保证所提供下载的免费资源的准确性、安全性和完整性,免费资源仅供下载学习之用!如有链接无法下载、失效,请联系客服处理!
3. 您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容资源!如用于商业或者非法用途,与本站无关,一切后果请用户自负!
4. 如果您也有好的资源或技术教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
5. 加入前端开发QQ群:565733884,我们大家一起来交流技术!
码云笔记 » 11. Dart 函数、箭头函数、匿名函数、立即执行函数及闭包讲解

发表评论

提供最优质的资源集合

立即查看 了解详情