Returns and Jumps

2017-06-23  本文已影响7人  b7cda9616c52

Kotlin 有三种跳跃的表达式:

都可以用在表达式里:
val s = person.name ?: return

Break and Continue Labels

Kotlin 中所有表达式都可以定义标签,语法

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

使用 breakcontinue 跳转到标签指定的位置:

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

这里的 break 会结束两层循环,使用 continue 只是结束当前循环,不会影响后面的循环。

Return at Labels

Kotlin 中函数可以嵌套,在内部闭包函数中使用 return 结束整个函数:

    fun foo() {
        arrayListOf<Int>(0, 1,2,3,4,5).forEach {
            if (it == 3) return
            println(it)
        }
        println("不会输出")
    }

结果:012

也可以不结束整个函数,跳过某个过程。如下,跳过 it == 3 的过程:

    fun foo() {
        arrayListOf<Int>(0, 1,2,3,4,5).forEach lit@ {
            if (it == 3) return@lit
            println(it)
        }
        println("执行了")
    }

结果:01245执行了

也可简单的使用函数名作为标签:

fun foo() {
        arrayListOf<Int>(0, 1,2,3,4,5).forEach {
            if (it == 0) return@forEach
            print(it)
        }
        println("执行了")
    }

结果:12345执行了

上面的都是lambda表达式的写法,也可以使用匿名函数:

fun foo() {
        arrayListOf<Int>(0, 1,2,3,4,5).forEach(fun(value: Int) {
            if (value == 0) return
            print(value)
        })
    }

结果:12345执行了

When returning a value, the parser gives preference to the qualified return, i.e.

return@a 1

means "return 1 at label @a" and not "return a labeled expression (@a 1)".

上一篇下一篇

猜你喜欢

热点阅读