Dart 下面的常量命名构造函数和静态常量字段有什么区别?
下面的Dart 下面的常量命名构造函数和静态常量字段有什么区别?,dart,Dart,下面的a和b之间有什么区别 class ImmutablePoint { const ImmutablePoint(this.x, this.y); final int x; final int y; const ImmutablePoint.originA() : this(0, 0); static const ImmutablePoint originB = const ImmutablePoint(0, 0); } void main() { const a
a
和b
之间有什么区别
class ImmutablePoint {
const ImmutablePoint(this.x, this.y);
final int x;
final int y;
const ImmutablePoint.originA() : this(0, 0);
static const ImmutablePoint originB = const ImmutablePoint(0, 0);
}
void main() {
const a = ImmutablePoint.originA();
const b = ImmutablePoint.originB;
}
从字面上看,一个是构造函数,另一个是静态变量。构造函数允许您定义常量,而静态变量已经是常量。这应该是不言自明的 从性能的角度来看?两个值解析为相同的常量定义对象:
const不可变点(0,0);
由于Dart的规范常量特性,所有引用此常量类的值都相同的0,0
(包括对ImmutablePoint.originA()
或甚至ImmutablePoint(0,0)
)的其他调用)都将减少到相同的编译时常量。因此,从实用的角度来看,无参数的const
构造函数和static const
变量都会产生几乎相同的编译代码,从而提高性能
(虽然从严格挑剔的角度来看,
静态常量
可能会在引用常量之前被编译为包含对不可变点
类型的静态引用。我对Dart如何编译这些情况的知识还不够,因此不能肯定地说,但我可以告诉你,即使确实发生了,p静态类型引用的性能命中率将在“纳秒或更短”级别,可以忽略不计。不要进行微优化,只需使用您认为更可读或更方便的方法。)从字面上看,一个是构造函数,另一个是静态变量。构造函数允许您定义常量,而静态变量已经是常量。这应该是不言自明的
从性能角度看?两个值解析为同一个常量定义的对象:
const不可变点(0,0);
由于Dart的规范常量特性,引用此常量类的所有内容都具有相同的值0,0
(包括对ImmutablePoint.originA()
甚至ImmutablePoint(0,0)
)因此,从实用的角度来看,无参数的const
构造函数和静态const
变量都会产生几乎相同的编译代码,从而提高性能
(虽然从严格挑剔的角度来看,
静态常量
可能会在引用常量之前被编译为包含对不可变点
类型的静态引用。我对Dart如何编译这些情况的知识还不够,因此不能肯定地说,但我可以告诉你,即使确实发生了,p静态类型引用的性能命中率将处于可忽略不计的“纳秒或更短”级别。不要进行微优化,只要使用您认为更可读或更方便的方法即可。)常量变量定义并命名单个值
const
构造函数定义了一种创建新值的方法。
如果该构造函数作为常量ImmutablePoint.originA()
调用,则由于常量规范化,它会创建变量包含的相同常量值。但是,您也可以调用新ImmutablePoint.originA()
(带或不带新
)并获取一个与任何其他点对象不同的新实例
Dart构造函数为
const
意味着可以使用const
调用它,而不是必须调用它。常量变量定义并命名单个值
const
构造函数定义了一种创建新值的方法。
如果该构造函数作为常量ImmutablePoint.originA()
调用,则由于常量规范化,它会创建变量包含的相同常量值。但是,您也可以调用新ImmutablePoint.originA()
(带或不带新
)并获取一个与任何其他点对象不同的新实例
Dart构造函数是
const
意味着可以使用const
调用它,而不是必须调用它。注意静态const ImmutablePoint originB=const ImmutablePoint(0,0);
可以简化为静态const ImmutablePoint originB=ImmutablePoint(0,0)由于Dart编译器的智能性,
请注意,由于Dart编译器的智能性,静态常量不可变点originB=常量不可变点(0,0);
可以简化为静态常量不可变点originB=不可变点(0,0);
。