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
可以被覆盖之外,foo
和bar
的声明有什么区别吗?
函数可以通过
引入
- 函数声明
- 方法声明
- getter 声明
- setter 声明
- 构造函数声明
- 函数文字
就 Dart specification 而言,函数字面量(又名匿名函数)和其他声明之间有 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
从我的角度来看
bar
不像 foo
声明那样可读
- 让函数文字完成它们的匿名工作 =)
PS 如果我遗漏了什么 - 请编辑我的答案或在评论中联系我
与许多其他语言一样,在 Dart 中声明函数的方法不止一种。问题是,有什么区别,也就是“我什么时候应该使用哪个”?
void foo(int i) {
print('i = $i');
}
void main() {
void Function(int) bar = (int j) {
print('j = $j');
};
foo(1);
bar(2);
}
除了bar
可以被覆盖之外,foo
和bar
的声明有什么区别吗?
函数可以通过
引入- 函数声明
- 方法声明
- getter 声明
- setter 声明
- 构造函数声明
- 函数文字
就 Dart specification 而言,函数字面量(又名匿名函数)和其他声明之间有 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
从我的角度来看
bar
不像foo
声明那样可读- 让函数文字完成它们的匿名工作 =)
PS 如果我遗漏了什么 - 请编辑我的答案或在评论中联系我