由于并非dart中的所有内容都是表达式(如Kotlin(,我想知道下一个代码如何运行:
示例1
我做了一个for循环,以某种方式返回每个数组项,这就像一个解构,但使用了另一种语法。
void main() {
final numbers = [1, 2, 3];
final computedNumbers = [for(final n in numbers) n];
print(computedNumbers);
}
它打印:[1, 2, 3]
示例2
在Flutter中,如果像这样的话,你可以构建一个数组:
[
Text("My Text"),
// Compiles fine
if (myExpressionIsTrue) Text("Optional Text")
]
最后,它创建了一个";解构的";如果myExpressionIsTrue
为true,则不包含元素的数组。有一件事让我很困惑,那就是如果我把if和{}
放在一起,它就不会编译,就像这样:
[
Text("My Text"),
if (myExpressionIsTrue) { // This fails at compile time
Text("Optional Text")
}
]
问题
问题是,由于if
或for
不是表达式,它是如何工作的?允许这样做的语言功能的名称是什么?
对于,该功能的名称为集合,如果则为collection。请参阅飞镖语言教程的列表部分。
我还强烈建议阅读《让Dart成为UI的更好语言》一文,该文讨论了该功能设计中的许多考虑因素。