美文网首页
Returns and Jumps

Returns and Jumps

作者: b7cda9616c52 | 来源:发表于2017-06-23 16:13 被阅读7次

    Kotlin 有三种跳跃的表达式:

    • return
    • break
    • continue

    都可以用在表达式里:
    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)".

    相关文章

      网友评论

          本文标题:Returns and Jumps

          本文链接:https://www.haomeiwen.com/subject/fsxccxtx.html