在 Dart 中声明变量的最佳做法是什么?

What's the best practice to declare a variable in Dart?

这个例子是与我的问题相关的一个简单案例。

案例 1: 声明退出循环

List<List<int>> matrix = [[1,2,3],[4,5,6],[7,8,9]];
List<int> o;
for(int i=0; i<matrix.length; i++) {
    o = List.from(matrix[i]);
    for(int e in o)
        print(e);
}

情况 2: 在循环内声明

List<List<int>> matrix = [[1,2,3],[4,5,6],[7,8,9]];
for(int i=0; i<matrix.length; i++) {
    List<int> o = List.from(matrix[i]);
    for(int e in o)
        print(e);
}

我在哪里声明变量重要吗?为什么?

局部变量的范围应该越小越好。因此,在循环内声明变量是更好的做法。

这样做的好处:

  • 避免混淆具有通用名称的变量:如果一个变量被命名为i并且在多个循环中引用同一个变量,它可能会混淆变量在程序的任何部分具有什么值。
  • 如果此局部变量在其他地方被引用
  • ,编译器会发出精确的警告和错误
  • 更好的优化:由于局部变量作用域仅限于循环,所以循环执行后不需要存储变量值。对于今天的标准,这个小优化并不重要。
  • 更好的可读性

仅当您不需要像这样重用更新后的变量值时,在循环内声明变量才是好的:

int counter = 0;
for(final i in range(1, 10)) {
    counter++;
    // use variable counter here as a "counter"
}

在下面的代码片段中,使用变量 counter 作为计数器是 无效的 因为变量在每个循环开始时重新初始化

for(final i in range(1, 10)) {
    int counter = 0;
    counter++;
    // use counter here as a "counter"
}

如果您确实想将变量用作计数器(或任何其他目的)并在循环内更新它的值并在循环范围外使用它,那么只在循环外声明变量。

参考文献:

  • Declaring variables inside loops, good practice or bad practice?
  • Declaring variables inside or outside of a loop