Kotlin返回和跳转 - Kotlin教程™

Kotlin有三个结构跳转表达式:

所有这些表达式都可以用作更大表达式的一部分:

val s = person.name ?: return

这些表达式的类型是Nothing类型

Break 和 Continue 标签

Kotlin中的任何表达式都可以标记一个标签。标签具有标识符的形式,它的后面跟@符号,例如:abc@fooBar@是有效标签(请参阅语法)。 要使用标注表达式,只是在其前面放上一个标签。

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

现在,可以标记breakcontinue标签:

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

标记 break 为标记跳转到执行点后。标记继续进行到该循环的下一次迭代。

在标签上返回

使用函数文字,局部函数和对象表达式,函数可以嵌套在Kotlin中。 修饰return允许从外部函数返回。 最重要的用例是从lambda表达式返回。如下代码示例 -

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

返回表达式从最近的包围函数返回,即foo。 (请注意,这种非局部返回仅适用于传递给内联函数的lambda表达式),如果需要从lambda表达式返回,必须对它进行标注并限定返回值:

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

现在,它只从lambda表达式返回。通常使用隐性标签更为方便:这样的标签与传递lambda的函数具有相同的名称。

fun foo() {
    ints.forEach {
        if (it == 0) 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类和继承