在 Dart for-in 循环中使用“final”或“var”?

Rus*_*mov 5 dart

for (var foo in bar) print(foo);
Run Code Online (Sandbox Code Playgroud)
for (final foo in bar) print(foo);
Run Code Online (Sandbox Code Playgroud)

这两者之间的性能有什么区别吗?或者唯一的区别是“避免意外重新分配”?

编辑: prefer_final_localsfinal提到编译器在使用时执行优化。在这里适用吗?dart2js输出与上面 2 个片段匹配。不确定dart2native

Mat*_*tia 5

foo唯一的区别是,如果使用 ,则可以重新分配该值var

for (var foo in bar) {
  foo = foo + 5;
  print(foo);
}

Run Code Online (Sandbox Code Playgroud)

使用 Final 这样做是行不通的

for (final foo in bar) {
  foo = foo + 5; //Error: The variable foo can be set only once
  print(foo);
}

Run Code Online (Sandbox Code Playgroud)

  • 如果编译器无法识别某个变量没有被重新分配,并且在没有重新分配时将其优化为最终变量,那么编译器应该会感觉很糟糕。我不会担心这个。 (5认同)
  • [prefer_final_locals](https://dart-lang.github.io/linter/lints/prefer_final_locals.html)提到编译器可以在使用“final”时进行优化。它会适用于这种情况吗? (2认同)