Kotlin 极简教程(7)- 返回和跳转

返回和跳转

Kotlin 有三种结构化跳转表达式:
- return 默认从最直接包围它的函数或者匿名函数返回
- break 终止最直接包围它的循环
- continue 继续下一次最直接包围它的循环

在 Kotlin 中任何表达式都可以用标签(label)来标记,标签的格式为标识符后跟 @ 符号,例如:abc@ 、fooBar@ 都是有效的标签

fun main(args: Array<String>) {
    fun1()
}

fun fun1() {
    val list = listOf(1, 4, 6, 8, 12, 23, 40)
    loop@ for (it in list) {
        if (it == 8) {
            continue
        }
        if (it == 23) {
            break@loop
        }
        println("value is $it")
    }
    println("function end")
}
value is 1
value is 4
value is 6
value is 12
function end

Kotlin 有函数字面量、局部函数和对象表达式。因此 Kotlin 的函数可以被嵌套
标签限制的 return 允许我们从外层函数返回,最重要的一个用途就是从 lambda 表达式中返回
。通常情况下使用隐式标签更方便,该标签与接受该 lambda 的函数同名

fun main(args: Array<String>) {
    fun1()
    println("-------------")
    fun2()
    println("-------------")
    fun3()
    println("-------------")
    fun4()
}

fun fun1() {
    val list = listOf(1, 4, 6, 8, 12, 23, 40)
    list.forEach {
        if (it == 8) {
            return
        }
        println("value is $it")
    }
    println("function end")
}

fun fun2() {
    val list = listOf(1, 4, 6, 8, 12, 23, 40)
    list.forEach {
        if (it == 8) {
            return@fun2
        }
        println("value is $it")
    }
    println("function end")
}

//fun3() 和 fun4() 中使用的局部返回类似于在常规循环中使用 continue
fun fun3() {
    val list = listOf(1, 4, 6, 8, 12, 23, 40)
    list.forEach {
        if (it == 8) {
            return@forEach
        }
        println("value is $it")
    }
    println("function end")
}

fun fun4() {
    val list = listOf(1, 4, 6, 8, 12, 23, 40)
    list.forEach loop@ {
        if (it == 8) {
            return@loop
        }
        println("value is $it")
    }
    println("function end")
}
value is 1
value is 4
value is 6
-------------
value is 1
value is 4
value is 6
-------------
value is 1
value is 4
value is 6
value is 12
value is 23
value is 40
function end
-------------
value is 1
value is 4
value is 6
value is 12
value is 23
value is 40
function end

猜你喜欢

转载自blog.csdn.net/new_one_object/article/details/80042268