为什么Dart有编译时间常数?

Set*_*add 12 dart

Dart具有编译时常量的概念.在编译时解析并创建编译时常量,并进行规范化.

例如,这是constPoint 的构造函数:

class Point {
  final num x, y;
  const Point(this.x, this.y);
}
Run Code Online (Sandbox Code Playgroud)

这是你如何使用它:

main() {
  var p1 = const Point(0, 0);
  var p2 = const Point(0, 0);
  print(p1 == p2); // true
  print(p1 === p2); // true
}
Run Code Online (Sandbox Code Playgroud)

这是一个非显而易见的功能,似乎与其他动态语言中的功能没有相似之处.const对象有限制,所有字段必须是final,并且必须有const构造函数.

为什么Dart有编译时常量?

Set*_*add 15

Florian Loitsch 从邮件列表中写道:

编译时常量的规范化属性很好,但不是获得它们的主要原因.编译时常量的真正好处是,它们不允许在构造时任意执行,因此可以在我们不希望执行代码的地方使用.例如,静态变量初始化器最初被限制为编译时常量,以避免在顶层执行.简而言之,他们确保程序以"main"开头而不是其他地方.