Kotlin控制流

97 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第31天,点击查看活动详情

Java中的控制流,在Kotlin中都有对应的实现,名字可能不太一样,功能上进行了扩展。

1、if-else表达式

在Java中,如果要在if-else表达式内返回一个值,必须加上return关键字。而在Kotlin中,表达式最后一行默认为返回值,可以在执行完相应操作后直接返回目标值,不需要加上return关键字。在Kotlin中没有三元操作符,但可以用if-else代替。如果把if-else当三元运算符使用,必须有else分支。

val max = if (a > b) a else b
2、for循环

for循环不像Java中for(;;)这样,只需要通过in关键字对目标对象进行遍历,直接获取遍历对象子项,目标对象可以是数组、列表、任何有迭代器的对象和整数区间。示例代码如下,item为遍历得到的子项元素。

    for (item in list){
        TODO()
    }

遍历数字区间,以遍历0~9为例:

for (num in 0..9) {
    TODO()
}

downTo关键字可以反序遍历数字区间,step指定跳过一定的步数,以反序遍历100~0,并且跳过10步为例:

for (num in 100 downTo 0 step 10) {
        print("$num ")
    }

代码运行结果:

100 90 80 70 60 50 40 30 20 10 0

indices关键字可以通过索引遍历数组或列表,示例代码如下,index为子项索引值。

    for (index in list.indices) {
//        TODO()
    }

withIndex()可以通过索引、子项值遍历数组或列表,适用于需要同时获取索引和子项的情况。示例代码如下,index为索引值,item为子项

val list = arrayListOf<Int>()
    for ((index, item) in list.withIndex()) {
//        TODO()
    }
3、while循环

Kotlin中的while(){}do{}while()循环和Java中的使用方法基本是一样的,不在此赘述。

4、when表达式

when表达式对标Java的switch表达式,但功能更加丰富。

示例代码如下,分支条件如果有多个值用逗号分隔开,使用关键字in!in检测是否在某个区间内,关键字is检测是否某种类型,如果没有满足的分支条件则走eles分支。该示例最终走的是!in 10..15分支。

val test = 5
    when (test) {
        0, 1, 2, 3 -> TODO()
        4 -> TODO()
        in 6..9 -> TODO()
        !in 10..15 -> TODO()
        is Int -> TODO()
        else -> TODO()
    }

除了上面的常规使用方法,分支条件还可以是表达式,如果when关键字后面不提供参数,可以用来代替if-else的使用,分支条件是bool表达式。