两者有什么区别const
and final
Dart 中的关键字?
dart 的网站上有一篇文章,解释得很好。 https://news.dartlang.org/2012/06/const-static-final-oh-my.html
Final:
“final”表示单赋值:final 变量或字段must有一个初始化程序。一旦赋值,final 变量的值就不能更改。最终修改变量.
Const:
“const”在 Dart 中的含义更加复杂和微妙。常量修改values。您可以在创建集合时使用它,例如 const [1, 2, 3],也可以在构造对象(而不是 new)时使用它,例如 const Point(2, 3)。这里,const意味着对象的整个深层状态可以在编译时完全确定,并且对象将被冻结并且完全不可变。
Const 对象有一些有趣的属性和限制:
它们必须根据可以在编译时计算的数据创建。 const 对象无法访问运行时需要计算的任何内容。 1 + 2 是有效的 const 表达式,但 new DateTime.now() 不是。
它们是深刻的、传递性的不可变的。如果您有一个包含集合的最终字段,则该集合仍然可以是可变的。如果你有一个 const 集合,那么其中的所有内容也必须是 const,递归的。
他们是规范化的。这有点像字符串驻留:对于任何给定的 const 值,无论 const 表达式被求值多少次,都会创建并重用单个 const 对象。
那么这是什么意思?
Const:
如果您拥有的值是在运行时计算的(new DateTime.now()
,例如),您可以not使用 const 来代替它。但是,如果该值在编译时已知(const a = 1;
),那么你应该使用const
over final
。两者之间还有另外 2 个较大差异const
and final
。首先,如果您正在使用const
在类中,您必须将其声明为static const
而不仅仅是const
。其次,如果你有一个const
集合,里面的所有东西都在const
。如果你有一个final
集合,里面的所有东西都是not final
.
Final:
final
应该用过const
如果您在编译时不知道该值,它将在运行时计算/抓取。如果您想要一个无法更改的 HTTP 响应,如果您想从数据库中获取某些内容,或者如果您想从本地文件中读取内容,请使用final
。任何在编译时未知的东西都应该是final
over const
.
话虽如此,两者const
and final
不能重新分配,但 a 中的字段final
对象,只要它们不是const
or final
它们本身可以被重新分配(与const
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)