Dart 使用;“最后的”;或;var";在循环中的省道? 用于(条形中的变量foo)打印(foo); 用于(条形图中的最终foo)打印(foo);

Dart 使用;“最后的”;或;var";在循环中的省道? 用于(条形中的变量foo)打印(foo); 用于(条形图中的最终foo)打印(foo);,dart,Dart,这两者在性能上有什么不同吗?还是唯一的区别是“避免意外的重新分配” 编辑: 提到编译器在使用final时执行优化。这里适用吗dart2js输出匹配上述两个代码段。不确定是否使用dart2native唯一的区别是,如果使用var,可以重新指定foo值 for(条形图中的变量foo){ foo=foo+5; 印刷(foo); } 使用final这样做是行不通的 for(最终食物单位为bar){ foo=foo+5;//错误:变量foo只能设置一次 印刷(foo); } 来自省道样式指南: 不要对局

这两者在性能上有什么不同吗?还是唯一的区别是“避免意外的重新分配”

编辑:
提到编译器在使用
final
时执行优化。这里适用吗<代码>dart2js输出匹配上述两个代码段。不确定是否使用
dart2native

唯一的区别是,如果使用
var
,可以重新指定
foo

for(条形图中的变量foo){
foo=foo+5;
印刷(foo);
}
使用final这样做是行不通的

for(最终食物单位为bar){
foo=foo+5;//错误:变量foo只能设置一次
印刷(foo);
}
来自省道样式指南:

不要对局部变量使用final

var较短,final不会改变代码的含义


如果不重新分配变量,使用“final”是一种很好的编程实践。它避免了由于错误赋值而导致的错误。我很怀疑使用
final
而不是
var
对局部变量的优化是否重要。即使这很重要,编译器也应该能够轻松确定是否重新分配了局部变量。额外的怀疑:提到编译器可以在使用
final
时进行优化。在这种情况下它会适用吗?如果编译器不能识别某个变量没有被重新分配,并且在没有被重新分配时将其作为最终变量进行优化,那么编译器应该会感觉不好。我不担心,那只是一个选择;这不是标准。事实上,页面链接的作用是相反的。因此,正如上面所说,“preference_final_locals(与:unessed_final不兼容)”和“unessed_final(与:prefere_final_locals不兼容)”。这只是品味的问题,但再次强调,var较短,并且是Dart文档示例中的默认值:稍后在同一页上,它说两者都是可以接受的,唯一的通用规则是保持一致: