Dart - 解构是允许从 for 或 if 语句构建数组的功能的名称

Dart - Is deconstruction the name of the feature that allows to build arrays from for or if statements

因为并非 dart 中的所有内容都是表达式 (Like Kotlin) 我想知道下一个代码如何运行:

示例 1

我做了一个 for 循环 returns 每个数组项,它就像一个解构,但使用了另一种语法。

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 为真,它会创建一个没有元素的“解构”数组。让我感到困惑的一件事是,如果我将 if 与 {} 放在一起,它不会编译,如下所示:

[
  Text("My Text"),
  if (myExpressionIsTrue) { // This fails at compile time
     Text("Optional Text") 
  }
]

问题

问题是它如何工作,因为 iffor 不是表达式,允许这样做的语言功能的名称是什么?

该功能的名称是 collection forcollection if。见 Lists section of the Dart Language Tour.

我还强烈建议您阅读文章 Making Dart a Better Language for UI,其中讨论了该功能设计中的许多注意事项。