Dart:何时使用 getter 与 final 字段

Dart: When to use a getter vs a final field

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

考虑两个代码示例,

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

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

在[2]中,最后的字段被转换成了getter.

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

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

如果您想控制一个值但让其他 类 可以访问,您将使用带有 public getter.

的私有变量

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

我认为没有首选方法。你可以使用任何一个。 它们的含义也不一定有任何区别。智能编译器可以转换为另一个,这取决于使用 class 的方式更有效。

假设编译器不改变表示。

  • final 字段在 class 的每个实例上引入一个存储值的内存槽,然后是读取该槽的通用 getter。
  • A getter 在 class 上引入了一个 getter 方法,除了 return 值外什么都不做。

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

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

总而言之,我不担心会有什么不同。 我个人倾向于 getter,因为我更喜欢通过查看对象的字段来推断对象的 state,而最终的 constant-valued 字段不会真正为国家做贡献