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

问题描述

因为 dart 并不是所有的东西都是一个表达式 (Like Kotlin) 我想知道下一个代码怎么可能运行:

示例 1

我做了一个 for 循环,以某种方式返回每个数组项,这就像一个解构,但使用了另一种语法。

void main() {
  final numbers = [1,2,3];
  
  final computednumbers = [for(final n in numbers) n];
  
  print(computednumbers);
}

它打印:[1,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,其中讨论了该功能设计中的许多注意事项。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...