Dart:何时使用吸气剂与最终剂

问题描述

我有一个简单的问题要问。

考虑两个代码示例,

// 1
class A {
  final a = 23;
}

// 2
class A {
  get a => 23;
}

在[2]中,最终字段转换为吸气剂。

问题:在哪种情况下应使用两种类型的代码?飞镖的首选方式是哪一种?

解决方法

在示例2中,a的值可以随时间变化。

如果要控制值但允许其他类访问,则可以使用带有公共获取器的私有变量。

如果该值永远不变,则可以考虑const / final / static

,

我认为没有更好的方法。您可以使用。 它们的含义也不一定有任何区别。一个聪明的编译器可以转换为另一个,这取决于使用类的方式更有效。

假设编译器不会更改表示形式。

  • final字段在类的每个实例上引入一个存储该值的内存插槽,然后是读取该插槽的通用getter。
  • getter在类上引入了getter方法,该方法除了返回值外不执行任何操作。

哪个更好取决于类的使用方式。如果只有很少的实例,则每个实例上额外的内存插槽的内存开销可以忽略不计。

如果编译器很聪明,它可能会跳过该字段的隐式getter并直接读取该插槽。 如果编译器很聪明,它也可以内联显式getter。

总而言之,我不会担心会有差异。 我个人倾向于使用吸气剂,因为我更喜欢通过查看对象的字段来推断对象的 state ,而最终的恒定值字段并不会真正影响状态。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...