【Kotlin学习日记】Day7:返回和跳转

大家好,欢迎加入小李君的Kotlin学习之旅。今天是小李君学习 Kotlin 的第七天。

Returns and Jumps - 返回和跳转

学习链接:

  • http://kotlinlang.org/docs/reference/returns.h4tml

Kotlin 跳转有三宝;return,break,continue

有点编程基础的人都知道这三宝是用来干嘛的,return 通常用作函数的返回,break 通常用作循环体的跳出,continue 通常用作跳过本次循环直接进入下一次循环的操作。

// 如果 person.name 不是空的,则赋值给 s,否则直接 return 出去
val s = person.name ?: return

更多关于 ?: 操作符的信息看这里:

  • 猫王操作符 - elvis operator

标签跳转

Kotlin 的标签跳转有点像 C++ 的 goto。

Any expression in Kotlin may be marked with a label.
在 Kotlin 里面,任何一个表达式都可以被一个标签所标记。

对于循环体来说,其本身可以视为表达式,break 和 continue 都可以 “goto”

loop@ for (i in 1..100) {
    for (j in 1..100) {
        if (...) break@loop    // 直接跳出两层循环体
    }
}

对于函数来说,return 也可以 “goto”。

/**
* 注意这个 forEach 后面跟着一个 lambda 表达式
* 表达式里面直接 return,会直接跳出 foo()
*/
fun foo() {
    ints.forEach {
        if (it == 0) return
        print(it)
    }
}

/**
* 如果想要仅仅跳出 forEach
* 就需要给 forEach 的表达式标记一个标签
*/
fun foo() {
    ints.forEach lit@ {
        if (it == 0) return@lit   // 跳出 forEach
        print(it)
    }
    // 跳出后来到这
}

/**
* 如果 forEach 用匿名函数,则如你所愿
*/
fun foo() {
    ints.forEach(fun(value: Int) {
        if (value == 0) return  // 跳出 forEach
        print(value)
    })
    // 跳出后来到这。
}

后面会讲到 lambda 表达式,就从程序可读性来讲,小李君更加倾向于使用匿名函数。不过其实这也是看个人习惯以及对 Kotlin 语法的熟悉程度了。如果相当熟练的话,其实用 lambda 表达式更加符合 Kotlin 简约的思想。

其实,标记标签的玩法非常灵活,就像 goto 那样,虽然如此,但还是要慎用。不是非常必要的场景下,也尽量不要太依赖标签。

讲真,goto 就像禁区一样,很多程序员都已经养成不使用 goto 的习惯了。

你可能感兴趣的:(【Kotlin学习日记】Day7:返回和跳转)