当前位置: 首页 > 知识库问答 >
问题:

静态编程语言理解for循环中缺少var关键字

欧阳声
2023-03-14

我是Kotlin的初学者,正在进行循环练习

简单代码示例:

 for (i in 1..5) print(i)

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

共有1个答案

子车勇锐
2023-03-14

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

不能将现有变量用作循环变量。循环变量的作用域为循环,并从外部作用域中隐藏现有变量。因此,这有点暗示您在这里声明一个新变量,即使没有关键字(但是我必须承认,如果我们必须在这里编写val/var关键字,阴影行为会更清楚)。

此外,循环变量实际上是循环主体内的val(不能重新分配),但它可以感觉像var,因为它会随着每次循环回合而改变,并且从技术上讲在循环主体之外声明。实际上,它就像在循环主体中声明的新val,每次循环迭代都有一个新值。

因此,您的示例代码可以被认为是:

var temp = 1
while (temp <= 5) {
    val i = temp
    println(i)
    temp++
}

这可能就是为什么设计者决定不在这里放置任何关键字:它是不必要的,而且无论是val还是var都会以自己的方式混淆。

 类似资料:
  • 我得到的错误是“缺少return语句”,代码如下: 有人能帮帮我吗?多谢.

  • 我可以找到类似的问题,但我找不到我对这个特定案例期望的答案。 当我执行这段代码时,我得到一个编译错误,上面写着“缺少返回语句”。但是,据我所知,很明显,for循环中的代码将毫无疑问地执行,因为第一次,x=0。因此,对于这种特殊情况,没有理由不在for循环中执行代码。那么,为什么我们还需要在for循环之外声明一个额外的return语句呢?。

  • 问题内容: 哪个对性能更好?这可能与其他编程语言不一致,因此,如果它们不同,或者如果您可以使用特定语言来回答我的问题,请解释。 我将以c ++为例,但是我想知道它如何在java,c或任何其他主流语言中工作。 VS 哪个表现更好?如果它是for循环,那么可以说已经声明了一个可以在while循环增量中使用的整数,我们是否不需要为while循环创建? 例: 与创建for循环相比,此实例是否会使while

  • 我有一个二维布尔数组“poorSignal”,需要编写一个返回网格的方法,如果数组上的一个点为真,则显示X,如果为假,则显示O。这是我的代码: 当我编译时,它在方法的最后一行给出了“missing return statement”。我也不确定“return”\n在打印阵列时是否可以添加新行。 这是一个赋值问题,所以我不能直接打印它,也不能只打印布尔值——它必须是一个生成网格的方法。

  • 问题内容: 我有一个二维布尔数组’poorSignal’,需要编写一个返回网格的方法,如果数组上的某个点为true,则显示X,如果为false,则显示O。这是我的代码: 当我编译时,它在方法的最后一行给出了“丢失的返回语句”。我也不确定在打印数组时’return“ \ n”是否可以添加新行。 这是一个分配问题,所以我不能直接打印它,也不能仅打印布尔值-它必须是产生网格的方法。 问题答案: 编译器无

  • 问题内容: 我在Java语言环境中发现了许多缺少的国家/地区-如果我打印出可用语言环境的列表, 我缺少许多国家,包括尼日利亚,伊朗,吉尔吉斯斯坦和巴基斯坦。任何人都可以对此进行说明,或者是否有更好(更全面)的方法来获取Java国家列表? 1.6.0_16-b01 问题答案: 世界上的国家和地区之间没有一对一的映射。语言环境指定区域。它们旨在标记诸如语言多样性之类的东西。只是一个明确的例子:印度,斯