Flutter中的最终/常量狂潮是什么?

时间:2018-11-12 22:22:24

标签: dart flutter

Java具有final和Dart一样,但是据我所知,大多数Java人都避免一直使用它,因为它会使代码的可读性降低。例如,final一直在classpublic static final int常量中使用,但是大多数人避免在方法变量中使用它,因为它被视为“过度的代码正确性”,许多开发人员,增加了样板代码。

C ++也有const,它会让它发疯:

char ** const * const x // declare x as const pointer to const pointer to pointer to char

现在,我开始学习Flutter,并且到处都看到finalconst。那些真的必要吗?比如说:

  

Widget子类中的字段始终标记为“最终”。

还是可以将它们视为“代码正确性过高”并删除?

很抱歉,如果我的问题太愚蠢,我真的是Dart和Flutter的新手,并且我不知道使用finalconst的所有副作用/好处来证明其他注意何时记得在我的代码中使用它们。

3 个答案:

答案 0 :(得分:3)

所有这些决赛都不只是为了好玩。颤动围绕不变性。 final是实施这种不变性的一种巧妙方法,可确保您正确遵循不同的设计模式。

绝对不是“过度正确”。它们的存在是为了确保应用程序可维护。绝对值得2个字符

答案 1 :(得分:2)

const表示变量的值在编译时是已知的,并且在应用程序的整个过程中它将是恒定的。

由于该值是在编译时已知的,因此您可以进行必要的优化。

final表示该值从设置开始即为常数或不变。但这是在运行时设置的。因此,您在编译时不了解它,也无法对其进行优化。

如果您不使用final,则将失去不变性功能,这是Flutter中应遵循的功能。您应该始终创建小部件,而不要对其进行修改。强制执行此操作的方法是将其所有字段都设为最终字段。

答案 2 :(得分:0)

使用此处未提及的const的真正好处是,在像Flutter这样的反应式UI中,可以定期重建小部件树的大部分,每个对象(及其所有自己的变量) 除非标记为const ,否则每次重新构建时都需要重新创建在每个小部件中使用的,在这种情况下,它将在应用程序的整个生命周期中重复使用同一实例。< / p>

即使使用适度复杂的UI,这也将快速保存成千上万个对象实例化,这对于创建小部件动画尤其重要。因此,在可能的情况下使用const被认为是一个好习惯。

正如其他人指出的那样,final是不同的,虽然Dart编译器可能会进行某些优化(如果您的变量被标记为var则是不可能的),但这些忽略不计。 final主要是确保遵循Flutter设计模式的一种方法。