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 字段不会真正为国家做贡献
我有一个简单的问题要问。
考虑两个代码示例,
// 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 字段不会真正为国家做贡献