如何解决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 ,而最终的恒定值字段并不会真正影响状态。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。