Java具有finalDart的功能,但据我所知,大多数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
Run Code Online (Sandbox Code Playgroud)
现在,我开始学习Flutter,final并且const在整个地方都可以看到。这些真的必要吗,例如当他们说:
Widget子类中的字段始终标记为“最终”。
还是可以将它们视为“代码正确性过多”并删除?
抱歉,如果我的问题太愚蠢,我真的是Dart和Flutter的新手,并且我不知道使用final和的所有副作用/好处const,以证明需要额外注意何时在我的代码中使用它们。
const 意味着变量的值在编译时是已知的,并且在整个应用程序期间将是恒定的。
由于该值是在编译时已知的,因此您可以进行必要的优化。
final表示该值从设置之时起就将是恒定的或不变的。但这是在运行时设置的。因此,您在编译时不了解它,也无法对其进行优化。
如果不使用,final则会失去Flutter中应遵循的不变性功能。您应该始终创建小部件,而不要对其进行修改。实施该方法的方法是使其所有字段最终确定。
所有这些决赛都不只是为了好玩。颤动围绕不变性。final这是强制实现这种不变性的一种好方法,可确保您正确遵循不同的设计模式。
他们绝对不是“过度正确”的。它们的存在是为了确保应用程序可维护。2个字符绝对值得付出
使用的主要好处const是,在像 Flutter 这样的响应式 UI 中,其中大部分小部件树可能会定期重建,每个小部件的每个对象(及其所有变量)都需要在每次重建时重新创建,除非它们被标记const,在这种情况下,相同的实例将在应用程序的整个生命周期中重复使用。
即使使用中等复杂的用户界面,这也将快速保存数千个对象实例,这可能很重要,尤其是在为小部件制作动画时。因此,const在可能的情况下使用被认为是一种很好的做法。
final不同的是,它不会带来任何性能优势,主要是确保您遵循 Flutter 设计模式的一种方式。在我看来,它提高了可读性,因为在使用 Flutter 进行开发时,快速了解什么是不可变的,什么不是非常重要。