当可以使用const构造函数时,有一个分析器/lint 检查来警告我:https : //dart-lang.github.io/linter/lints/prefer_const_constructors.html
(即使用final a = const A();代替final a = A();)
我认为要了解优点(对于 const 构造函数,只会有一个具有相同常量值的实例)。但为什么这不是默认设置?由于 dart 2new可以省略,那么为什么他们不更改创建新实例的定义,该实例可以const简单地创建为const而不是new?我认为拥有一切一定有一些缺点const吗?
(例如,在一个常量上下文中,const [A()]它实际上与 相同const [const A()],那么为什么不在所有地方)?
那么他们为什么不改变创建可以创建新实例的定义
const仅仅作为const代替new?
如果你的意思是为什么不final a = A();自动假设const A()ifA有一个const构造函数:
有时它是自动的:
const a = A();
在这种情况下A, 的构造函数是在const上下文中调用的,并且const在右侧不需要额外的限定符。
显式const表示意图。例如,假设您有:
final a = A(B());
whereA并B有const构造函数。后来有人改了:
final a = A(C());
其中,C不会不具有const构造函数。如果const是自动的,那么您将不知道它a不再是const. 也许没问题,但它也可能突然对您的应用程序的性能产生负面影响,如果没有明确的const限定符,本地更改的影响可能比预期的范围更广。(也就是说,显式 const限定符和自动添加它们并不相互排斥。)
const 可能有缺点。const创建编译时常量。如果你有:
final a1 = A();
final a2 = A();
identical(a1, a2)不是真的。如果const A()是隐式的,那么identical(a1, a2) 将是真的,也许这不是代码打算拥有的属性。
我认为编译时常量永远存在。重点是拥有一个可以重用的对象,而不是重新构建它。不利的一面是,它们真的不容易被摧毁。
| 归档时间: | 
 | 
| 查看次数: | 868 次 | 
| 最近记录: |