Java具有final
和Dart一样,但是据我所知,大多数Java人都避免一直使用它,因为它会使代码的可读性降低。例如,final
一直在class
等public static final int
常量中使用,但是大多数人避免在方法变量中使用它,因为它被视为“过度的代码正确性”,许多开发人员,增加了样板代码。
C ++也有const
,它会让它发疯:
char ** const * const x // declare x as const pointer to const pointer to pointer to char
现在,我开始学习Flutter,并且到处都看到final
和const
。那些真的必要吗?比如说:
Widget子类中的字段始终标记为“最终”。
还是可以将它们视为“代码正确性过高”并删除?
很抱歉,如果我的问题太愚蠢,我真的是Dart和Flutter的新手,并且我不知道使用final
和const
的所有副作用/好处来证明其他注意何时记得在我的代码中使用它们。
答案 0 :(得分:3)
所有这些决赛都不只是为了好玩。颤动围绕不变性。 final
是实施这种不变性的一种巧妙方法,可确保您正确遵循不同的设计模式。
绝对不是“过度正确”。它们的存在是为了确保应用程序可维护。绝对值得2个字符
答案 1 :(得分:2)
const
表示变量的值在编译时是已知的,并且在应用程序的整个过程中它将是恒定的。
由于该值是在编译时已知的,因此您可以进行必要的优化。
final
表示该值从设置开始即为常数或不变。但这是在运行时设置的。因此,您在编译时不了解它,也无法对其进行优化。
如果您不使用final
,则将失去不变性功能,这是Flutter中应遵循的功能。您应该始终创建小部件,而不要对其进行修改。强制执行此操作的方法是将其所有字段都设为最终字段。
答案 2 :(得分:0)
使用此处未提及的 即使使用适度复杂的UI,这也将快速保存成千上万个对象实例化,这对于创建小部件动画尤其重要。因此,在可能的情况下使用 正如其他人指出的那样,const
的真正好处是,在像Flutter这样的反应式UI中,可以定期重建小部件树的大部分,每个对象(及其所有自己的变量) 除非标记为const
,否则每次重新构建时都需要重新创建在每个小部件中使用的,在这种情况下,它将在应用程序的整个生命周期中重复使用同一实例。< / p>
const
被认为是一个好习惯。final
是不同的,虽然Dart编译器可能会进行某些优化(如果您的变量被标记为var
则是不可能的),但这些忽略不计。 final
主要是确保遵循Flutter设计模式的一种方法。