Kotlin学习之-4.3.4 返回和中止循环

Kotlin学习之-4.3.4 返回和中止循环

Kotlin 有3中结构化的跳转语句:

  • return,默认是从最近的函数或者匿名函数中中返回。
  • break,中止最近的循环
  • continue,从当前的循环中继续执行下一次循环

所有这些表达式都可以被用来组成更大的表达式

val s = person.name ?: return

基于标签的break 和continue

Kotlin中的任何表达式都可以被 标记成一个标签label,标签由一个标识符和紧跟的@组成,例如:abc@, fooBar@ 是合法的标签命名。 想要把一个表达式定义成标签,只要在它签名写一个标签即可。

loop@ for (i in 1..100) {
    //...
}

现在我们可以针对这个标签来使用breakcontinue

loop@ for (i in 1..100) {
    for (j in 1..100) {
        if (...) break@loop
    }
}

一个带标签的break 语句,会把执行点跳转到标签标记的位置之后。 一个带标签continue语句,会还执行循环的下一轮遍历。

在标签位置返回

Kotlin支持的函数语法可以让本地函数,对象表达式和函数可以内嵌在一起。带有标签的return语句可以让我们从一个外层的函数中返回。 最终要的用例就是从一个lambda表达式中返回。例如:

fun foo() {
    ints.forEach {
        if (it == 0) return
        print(it)
    }
}

这个return语句会从最近的函数中返回,也就是会从foo()函数中返回。(注意这种非局部的返回只是在lambda表达式中支持传递给内联函数)。如果我们需要从一个lambda表达式中返回,我们只能先标记它,然后使用带标签的返回语句。

fun foo() {
    ints.forEach lit@ {
        if (it == 0) reutrn@lit
        print(it)
    }
}

现在它只是从lambda表达式中返回。还有时候,使用隐式标签会更加方便:隐式标签的名字和调用这个lambda表达式的函数名是一样的。

fun foo() {
    val intArray2 = intArrayOf(1, 2, 3)
    // will print 13  skip 2
    intArray2.forEach {
        if (it == 2) return@forEach
        print(it)
    }
}

或者还可以把lambda表达式替换成给一个匿名函数。一个返回语句在一个匿名函数中会从匿名函数中返回。

fun foo() {
    ints.forEach(fun(value: Int) {
        if (value == 0) return
        print(value)
    })
}

如果需要返回值,解析器需要一个参数,例如:

return@a 1

意味着在@a这个位置返回1, 而不是返回一个标签表达式(@a 1)

根据提供的引用内容,出现了两个关于Kotlin的错误信息。第一个引用中显示了一个无法解析依赖的错误,指出无法下载kotlin-reflect.jar文件。第二个引用中显示了一个关于kotlin-gradle-1.8.10.jar (org.jetbrains.kotlin:kotlin-reflect)",这个错误通常是由于Gradle无法找到所需的kotlin-reflect库而引起的。解决这个问题的方法是确保你的项目的Gradle配置正确,并且指定了正确的Kotlin版本。 你可以尝试以下几个步骤来解决这个问题: 1. 确保你的项目的build.gradle文件中包含了正确的Kotlin版本和kotlin-gradle-plugin版本。你可以在build.gradle文件中找到类似于以下代码的部分: ```groovy ext { kotlin_version = '1.8.10' } dependencies { // ... implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version" // ... } buildscript { // ... dependencies { // ... classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // ... } } ``` 请确保kotlin_version变量的值与你想要使用的Kotlin版本一致,并且在dependencies和buildscript的classpath中正确引用了kotlin-gradle-plugin。 2. 如果你已经确认了build.gradle文件中的配置正确无误,那么可能是因为Gradle无法从远程仓库下载kotlin-reflect.jar文件。你可以尝试清除Gradle的缓存并重新构建项目。在命令行中执行以下命令: ```shell ./gradlew clean ``` 然后重新构建项目: ```shell ./gradlew build ``` 这将清除Gradle的缓存并重新下载所需的依赖。 3. 如果上述步骤***切换到其他网络环境来解决这个问题。 希望以上步骤能够帮助你解决问题。如果你还有其他问题,请随时提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值