Dart - 将函数声明为变量

Dart - declare function as variable

与许多其他语言一样,在 Dart 中声明函数的方法不止一种。问题是,有什么区别,也就是“我什么时候应该使用哪个”?

void foo(int i) {
  print('i = $i');
}

void main() {
  void Function(int) bar = (int j) {
    print('j = $j');
  };

  foo(1);
  bar(2);
}

除了bar可以被覆盖之外,foobar的声明有什么区别吗?

函数可以通过

引入
  • 函数声明
  • 方法声明
  • getter 声明
  • setter 声明
  • 构造函数声明
  • 函数文字

Dart specification 而言,函数字面量(又名匿名函数)和其他声明之间有 2 个区别

  1. 它没有名字 - 匿名
  2. 我们不能声明一个return类型(只能通过类型推断获得)

如果您希望保持类型安全,则必须编写长声明。

考虑这个例子:

String foo(int i, {bool b}) => '$b $i'; // return type declared

final bar = (int i, {bool b}) => '$b $i'; // return type could not be infered

final String Function(int i, {bool b}) bar = (i, {b}) => '$b $i'; // return type infered

从我的角度来看

  1. bar 不像 foo 声明那样可读
  2. 让函数文字完成它们的匿名工作 =)

PS 如果我遗漏了什么 - 请编辑我的答案或在评论中联系我