Kotlin:流程控制之条件语句 if 和 when

在Kotlin有两种用于判断条件的语句if 和when。

if

在Kotlin,if既可以是条件语句,仅仅用作条件判断,还可以是条件表达式,表达式会返回一个值。

传统的条件判断if语句

var max = a 
if (a < b) max = b

if-else

var max: Int
if (a > b) {
    max = a
} else {
    max = b
}

if表达式

在if表达式里,最后的值作为结果返回,此处不需要使用return语句

val max = if (a > b) a else b

示例里条件成立则返回a,否则返回b,这类似于Java里的三元条件运算。

使用{}把执行内容括起来,最后的值为返回值:

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

示例里条件成立返回最后的值a,否则返回else里最后的值b。

注意:在if表达式里,if-else必须同时存在

when

when类似于C语言里的switch,根据不同条件执行分支语句。

基本使用

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> {
        print("x is neither 1 nor 2")
    }
}

when语句在括号里接收一个参数,把参数和各个分支作比较,匹配到相应的分支,执行分支代码。如果参数和所有分支都不匹配,执行else里的代码。

合并分支

但又多个分支执行的代码一样的,可以把多个分支合并。

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

任意表达式作为分支条件

任意的表达式都可以作为when的分支条件,这与很多计算机语言要求switch的分支表达式必须为常量不同。

when (x) {
    parseInt(s) -> print("s encodes x")
    else -> print("s does not encode x")
}

布尔表达式

when (x) {
    in 1..10 -> print("x is in the range")
    in validNumbers -> print("x is valid")
    !in 10..20 -> print("x is outside the range")
    else -> print("none of the above")
}

用作类型判断

fun hasPrefix(x: Any) = when(x) {
    is String -> x.startsWith("prefix")
    else -> false
}

注意:此处和if-else表达式一样,可以返回分支的值。

无参数when

when语句可以为空参数,此时分支条件为布尔表达式

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

版权声明:著作权归作者所有。

相关推荐

基于RxJava和Kotlin封装类处理网络加载数据

在Android开发里,常常需要处理网络加载数据,这里基于RxJava,和Kotlin的Sealed class(封装类)的特性实现的一个示例。Resource.kt首先使用Kotlin的sealed class实现Resource.kt,它用来包装数据和状态。sealed class Resource<out T> { &n

Kotlin:循环语句for与while

For语句使用for语句做迭代需要满足:提供一个迭代器Iterator。使用成员函数提供迭代器如Array:operator fun iterator(): Iterator<T> 注意:iterator()函数需要使用operator标记。使用扩展函数提供迭代器除了添加成员函数iterator提供迭代器外,也可以通过extension function来添加iterator

Kotlin: package和import

packageKotlin的代码结构是通过源文件和package组织。在源文件的开头声明package,如package foo.bar fun baz() {} class Goo {} // ... 在声明的package源文件里的所有内容均属于此package。如示例里的baz函数和类Goo全名分别为foo.bar.baz和f

Kotlin实现Java的三元条件运算

在Kotlin没有类似Java的三元条件运算:a ? b : c 在Kotlin有几种等效的方法:ifval r =if (a) b else c whenval r = when(a) {     true 

TypeScript:变量声明之解构赋值

解构(Destructuring)是ES6新增的特性。数组和对象(Object)的一个作用是把一些值组合打包在一起。与之相对,解构就类似把数组里的值或对象的属性解包。使用解构赋值语法可以很简便地把数组的值或对象的属性赋值给单独的变量。语法var a, b, rest; [a, b] = [10, 20]; console.log