【发布时间】:2021-04-24 09:18:18
【问题描述】:
1。 Dart Language tour 有冲突
在功能部分,它说
=> expr 语法是 { return expr; 的简写; }。
注意:箭头 (=>) 和分号 (;) 之间只能出现表达式,而不是语句。例如,您不能在其中放置 if 语句,但可以使用条件表达式。
但在匿名函数部分,它说
如果函数只包含一个语句,你可以使用箭头符号来缩短它
这是否意味着我可以在匿名函数中使用不是表达式的语句(例如 if 语句)?
var fun = () => return 3; // However, this doesn't work.
var gun = () {
return 3; // this works.
}
或者我混淆了表达和陈述的概念?我以为
- 表达式:可以计算为一个值(2 + 3,print('') 也属于表达式)
- 语句:可以执行的代码。所有表达式都可以是语句。 if 语句和 return 语句是非表达式语句的示例。
2。这是表达式还是语句
void foo() => true; // this works.
void goo() {
return true; // this doesn't work.
}
void hoo() {
true; // this works.
}
如果将true理解为表达式,那么它就意味着返回true,我认为它不应该起作用,因为foo的返回类型是void。
那么是不是意味着 foo 中的 true 被理解为一个语句?但这个结论与 Dart Language Tour 相矛盾。 (它们是顶级命名函数)。此外,这意味着我们可以使用带箭头语法的语句。
我使用来自 Flutter 的 VSCode 和 Dart:1.22.5。我根据 VSCode 错误消息告诉代码有效的代码和无效的代码。
因为这是我的第一个问题,对于我简短的英语和格式错误的问题,我深表歉意。
【问题讨论】:
-
我认为“如果函数只包含一个语句,您可以使用箭头符号缩短它”是在随意而不是技术意义上使用“语句”。
=>需要右侧的表达式。确实可以缩短带有return 3;的单个语句的函数;缩写形式为=> 3。在实践中,很少(但并非不可能)拥有一个不能缩短的语句的函数。