Kotlin学习笔记(二)流程控制语句

流程控制语句是编程语言中的核心之一。Kotlin的流程控制语句可分为:

分支语句(ifwhen)

循环语句(forwhile )和

跳转语句 (returnbreakcontinuethrow)等。

注意,Kotlin没有switch语句,但是可以用更强大的when语句替代。

1 if表达式

对于给定的if,else语句是可选的,else if 语句也是可选的。Kotlin的if语句和其他语言类似,这里不再赘述,我们来看看它的特殊用法。

我们可以把 if 表达式的结果赋值给一个变量,if作为代码块时,最后一行为其返回值。

val max = if (a > b) {
    print("Choose a")
    a
} else {
    print("Choose b")
    b
}

在Kotlin中没有类似true? 1: 0这样的三元表达式,因此我们可以用if else语句替代。

if(true) 1 else 0

2 更强大的when表达式

when 既可以被当做表达式使用也可以被当做语句使用。如果它被当做表达式,符合条件的分支的值就是整个表达式的值,如果当做语句使用, 则忽略个别分支的值。类似其他语言的 switch 操作符。

Kotlin中when的语法表达追求极简风格,整理如下:

  • 类似switch-case,根据候选值的不同可以有多个分支,else 同 switch 的 default。如果其他分支都不满足条件将会执行 else 分支。
  • 如果很多分支需要用相同的方式处理,则可以把多个分支条件放在一起,用逗号分隔。
  • 我们可以使用in或者is表达式来进行判别。
  • when 也可以用来取代 if-else if链。 如果不提供参数,所有的分支条件都是简单的布尔表达式,而当一个分支的条件为真时则执行该分支。
fun main(args: Array) {
    var x = 0
    when (x) {
        1 -> println("x == 1")
        2 -> println("x == 2")
        else -> { 
            println("x 不是 1 ,也不是 2")
        }
    }

    when (x) {
        0, 1 -> println("x == 0 or x == 1")
        else -> println("otherwise")
    }

    when (x) {
        in 0..10 -> println("x 在该区间范围内")
        else -> println("x 不在该区间范围内")
    }

    when(x) {
        is Int -> println("这是Int类型数据")
        else -> println("这不是Int类型数据")
    }

    when {
        x.isOdd() -> print("x is odd")
        x.isEven() -> print("x is even")
        else -> print("x is funny")
    }
}

3 for循环

Kotlin的for循环跟现代的程序设计语言基本相同,可以对任何提供迭代器(iterator)的对象进行遍历。语法如下:

for (item in collection) {
    print(item)
}

遍历数组或者list的两种方法:

for (i in array.indices) {
    print(array[i])
}

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

4 forEach循环

既然提到了for,那么我们不得不提一下forEach。forEach是Kotlin的一个高级函数,其语法如下:

iterator.forEach {
    println("The element is $it")
}

5 while循环

while 和 do .. while使用方式跟C、Java语言基本一致。这里不再赘述。

6 跳转语句

Kotlin 有三种结构化跳转表达式:

  • return。默认从最直接包围它的函数或者匿名函数返回。
  • break。终止最直接包围它的循环。
  • continue。继续下一次最直接包围它的循环。

此外,我们还可以用Label标签来控制 returnbreakcontinue的跳转(jump)行为。在 Kotlin 中任何表达式都可以用标签(label)来标记。 标签的格式为标识符后跟 @ 符号,例如:abc@jarOfLove@ 都是有效的标签。


参考资料

  1. Kotlin官方文档
    http://kotlinlang.org/docs/reference/control-flow.html
  2. Kotlin中文文档
    http://www.kotlindoc.cn/chapter/chapter3_kotlin_basics.html

你可能感兴趣的:(Kotlin)