Dart - 将函数声明为变量

Sta*_*cky 3 variables function function-declaration dart

在 Dart 中 - 与许多其他语言一样 - 声明函数的方法不止一种。问题是,是否存在任何差异,即“我什么时候应该使用哪个”?

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

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

  foo(1);
  bar(2);
}
Run Code Online (Sandbox Code Playgroud)

除了可以被覆盖的事实之外,声明foobar其他方面有什么区别吗?bar

Ser*_*kov 5

函数可以通过以下方式引入

  • 函数声明
  • 方法声明
  • 吸气剂声明
  • 设置器声明
  • 构造函数声明
  • 函数字面量

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

  1. 它没有名字——匿名
  2. 我们无法声明返回类型(只能通过类型推断获得)

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

考虑这个例子:

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
Run Code Online (Sandbox Code Playgroud)

依我看来

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

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