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

时间:2012-09-14 05:49:54

标签: dart

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

例如,这是Point的一个const构造函数:

class Point {
  final num x, y;
  const Point(this.x, this.y);
}

以下是你如何使用它:

main() {
  var p1 = const Point(0, 0);
  var p2 = const Point(0, 0);
  print(p1 == p2); // true
  print(p1 === p2); // true
}

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

为什么Dart有编译时常量?

2 个答案:

答案 0 :(得分:14)

来自mailing list的Florian Loitsch写道:

  

编译时常量的规范化属性很好,但是   不是拥有它们的主要原因。编译时的真正好处   常量是,它们不允许任意执行   建筑,因此可以在我们不想要的地方使用   要执行的代码。例如,静态变量初始化器是   最初限制为编译时常量以避免执行   顶级的。简而言之,他们确保程序始于   “主要”,而不是其他地方。

答案 1 :(得分:1)

Lasse的回答here给了我很多帮助

  

那么,编译时常量到底有什么用呢?

     
      
  • 它们对枚举很有用。
  •   
  • 您可以在交换机情况下使用编译时常量值。
  •   
  • 它们用作注释。
  •   
     

编译时常数在Dart切换之前更为重要   懒惰地初始化变量。在此之前,你只能申报   一个初始化的全局变量,如" var x = foo;"如果" foo"曾经是一个   编译时常量。如果没有这种要求,大多数程序都可以   不使用任何const对象编写