Dart 什么';在《颤栗》中的最终/持续狂热是什么?

Dart 什么';在《颤栗》中的最终/持续狂热是什么?,dart,flutter,Dart,Flutter,Java有final和Dart,但就我所见,大多数Java人总是避免使用它,因为它会降低代码的可读性。例如,final一直在类常量中使用,例如公共静态final int,但大多数人避免在方法变量中使用它,因为许多开发人员将其视为“过多的代码正确性”,并将其添加到样板代码中 C++还有const,它可能会变得疯狂: char ** const * const x // declare x as const pointer to const pointer to pointer to char 现

Java有
final
和Dart,但就我所见,大多数Java人总是避免使用它,因为它会降低代码的可读性。例如,
final
一直在
常量中使用,例如
公共静态final int
,但大多数人避免在方法变量中使用它,因为许多开发人员将其视为“过多的代码正确性”,并将其添加到样板代码中

C++还有
const
,它可能会变得疯狂:

char ** const * const x // declare x as const pointer to const pointer to pointer to char
现在我开始学习颤振,我看到到处都是
final
const
。这些真的是必要的吗,比如他们说:

小部件子类中的字段始终标记为“final”

或者它们可以被视为“代码正确性过剩”并被删除


抱歉,如果我的问题太愚蠢了,我对飞镖和颤振真的是个新手,我不知道使用
final
const
的所有副作用/好处,为了证明何时在我的代码中使用它们的额外注意是正确的。

const
意味着变量的值在编译时是已知的,并且在应用程序的整个过程中都是常量

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

final
表示该值从设置之时起即为常量或不可变。但它是在运行时设置的。因此,您在编译时不知道它,也无法优化它


如果不使用
final
,您将失去在flifter中应该坚持的不变性特性。您应该始终创建小部件,而不是修改它。强制执行的方法是将所有字段设置为最终字段。

所有这些最终字段不只是为了好玩。颤振围绕着不变性
final
是一种实现不变性的简洁方法,可确保正确遵循不同的设计模式


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

使用
const
的主要好处是,在类似flift的反应式UI中,可以定期重建小部件树的大部分,每次重建时都需要重新创建每个小部件的每个对象(及其自身的所有变量),除非它们标记为
const
,在这种情况下,同一实例将在应用程序的整个生命周期内重复使用

即使有一个中等复杂的UI,这也将快速保存数千个对象实例化,这可能非常重要,尤其是在制作小部件动画时。因此,在可能的情况下使用
const
被认为是一种良好的做法


final
不同,它不会带来任何性能优势,主要是确保您遵循颤振设计模式的一种方式。在我看来,快速了解什么是不可变的,什么是不可变的,在使用flift开发时非常重要,这提高了可读性。

为什么widget的字段必须有
final
?我可以省略
最终版
,减少样板文件。是的,你可以省略它们,这样就行了。但是,你失去了不变性的特点,你应该坚持。您应该始终创建小部件,而不是修改它。强制执行的一种方法是使其所有字段都是最终的。不,因为
var
final
相比,Ohh right lol,我仍然在开始学习,仍然保持Java思维是的,但我尝试了
const
所有可能的方法,我的代码失去了很多可读性,开发起来变得单调乏味,而性能优势在现代硬件中是看不到的。我不是说我反对它,只是一个平衡的分析,你为什么说它失去可读性?在Dart 2之前,您必须为每个对象编写
const
,但现在不需要
const
对象中已标记的所有内容
const
,这是隐式的。在制作复杂的动画时,可以看到性能优势,其中小部件树的一部分在每一帧上重建(否则,您可能会看到动画结巴)。我同意动画,但我更多地谈论的是将所有颜色作为常量等传递(我不记得这里的所有选项,但我记得有很多),还有几个小部件可以是const。有一个linter选项可以在某些内容不是常量时发出警告,如果我试图遵守它,我的代码会变得很糟糕,对于那些只更新一次就再也不会更新的部分。是的,我同意当性能无关紧要时,最好以可读性为目标。我只是很惊讶它造成了可读性的损失。我也同意。。。我加载了过多的变量,调用了setState()无数次。。。除了动画,几乎没有或根本没有性能差异!你必须意识到,dart虚拟机必须能够与JVM这样的家伙较量效率。。。如果这可以做到,而不跳过篮筐,我相信谁建立了飞镖虚拟机的家伙不会退缩!