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有编译时常量?
答案 0 :(得分:14)
来自mailing list的Florian Loitsch写道:
编译时常量的规范化属性很好,但是 不是拥有它们的主要原因。编译时的真正好处 常量是,它们不允许任意执行 建筑,因此可以在我们不想要的地方使用 要执行的代码。例如,静态变量初始化器是 最初限制为编译时常量以避免执行 顶级的。简而言之,他们确保程序始于 “主要”,而不是其他地方。
答案 1 :(得分:1)
Lasse的回答here给了我很多帮助
那么,编译时常量到底有什么用呢?
- 它们对枚举很有用。
- 您可以在交换机情况下使用编译时常量值。
- 它们用作注释。
编译时常数在Dart切换之前更为重要 懒惰地初始化变量。在此之前,你只能申报 一个初始化的全局变量,如" var x = foo;"如果" foo"曾经是一个 编译时常量。如果没有这种要求,大多数程序都可以 不使用任何const对象编写