Kotlin 理解 for 循环中缺少 var 关键字

Yan*_*ior 3 kotlin

我是 Kotlin 的初学者,正在经历 for 循环

简单代码示例:

 for (i in 1..5) print(i)
Run Code Online (Sandbox Code Playgroud)

请有人告诉我为什么我们不使用关键字 var / val 指定计数器/迭代器变量类型“i”。因为“var /val”是 Kotlin 中声明变量的标准方法。

Jof*_*rey 6

for这就是循环语法的设计方式。我不能代表设计师说话,但我相信这是一个设计决定,以避免不必要的膨胀,甚至可能造成混乱。

不能使用现有变量作为循环变量。循环变量的作用域为循环,并遮蔽外部作用域中的现有变量。因此,这暗示着您在这里声明一个新变量,即使没有关键字(但是我必须承认,如果我们必须在这里编写 / 关键字,则遮蔽行为会更清晰valvar

另外,循环变量实际上是val循环体内部的 a (它不能重新分配),但它可能感觉像 avar因为它在每个循环回合都会发生变化,并且从技术上讲是在循环体外部声明的。实际上,它就像val在循环体中声明的 new ,并为每次循环迭代提供一个新值。

所以你的示例代码可以被认为是:

var temp = 1
while (temp <= 5) {
    val i = temp
    println(i)
    temp++
}
Run Code Online (Sandbox Code Playgroud)

这可能就是为什么设计师决定不在此处放置任何关键字的原因:这是不必要的,而且两者val都会var以自己的方式造成混乱。

  • 也许这就是为什么他们倾向于不让你添加“val”或“var”。它不完全是一个“var”,因为它的行为就像一个“val”,为循环的每次迭代重新声明,因此它的范围在封装内部是本地的,即使它是在封装外部命名的。 (2认同)