流程控制:条件语句

Kotlin 的流程控制,咱们分为两部分来介绍,第一部分是条件语句,第二部分是循环语句。今天咱们首先看一下 Kotlin 中的条件语句:java

1. if - else 条件判断语句

做为一门更加现代的编程语言,Kotlin 中的 if 条件语句与其余类 C 语言相比,最大的区别在于if 语句自己就是个有返回值的表达式。咱们用一个最简单的 max 函数做一下对比:编程

// Java 语言写法public static int max(int a, int b) {
    if (a <= b)
        return b;
    else
        return a;
    // 或者使用三目运算符 return (a <= b)?b:a;}

因为 if - else 语句在 Java 不是个表达式,咱们必须在判断条件后执行返回语句,这让每一个条件判断变得臃肿无比。Java 为了简化条件判断语句引入三目运算符,但滥用三目运算符的结果是,一长串 ? 和 : 把清晰的逻辑变得混乱不堪,让代码的可阅读性变得十分低下。数组

然而,使用 Kotlin,咱们能把逻辑写得清清楚楚,让代码变得简洁清晰:app

 // Kotlin 写法fun max(a: Int, b: Int) = if(a <= b) b else a

固然,若是仍是习惯不了这种过于简洁的写法,依然能够把 if 看成语句使用:编程语言

 // Kotlin 中的传统写法fun max(a: Int, b: Int) {
    if (a <= b) 
        return b 
    else 
        return a}

这里咱们有个地方须要注意,若是咱们把 if 语句看成表达式使用,那么必定要有 else 部分ide

咱们val a = 1val b = 0val max = if (a <= b) b看一下上面的语句,由于 a <= b 的结果为 false,因此代码并不会执行到将 b 赋给 max 的部分,max 其实是 null, 这时咱们再执行其余语句就会出现错误。Kotlin 为避免出现这样的问题,在编译时就要求,做为表达式使用的 if 语句,必需要有 else 语句与之搭配,不然就会出现编译错误。函数

2. when 条件选择语句

在初学 C 和 Java 的 switch 语句时,我被它坑得不浅,用几个布尔表达式做为选择分支的条件,结果天然是编译错误。仔细查看语法规范才明白,C 的 switch 语句只能把整数常量做为判断条件,Java 的选择大一点,却也只扩大到整数的封装类、字符串和枚举,一旦加入一点复杂的逻辑,咱们就得用成堆的 if - else 语句,难道咱们就不能把布尔表达式做为判断分支的条件吗?Kotlin 作到了这一点。spa

Kotlin 使用 when 语句替代类 C 语言中的 switch 语句,但它比 switch 更增强大。orm

首先,switch 能作的,when 也能作:ci

 // 输入 xwhen (x) {
    //判断条件 -> 执行语句
    1 -> println("x = 1")
    2 -> println("x = 2")
    // 上面条件都不知足时执行
    else -> println("x is neither 1 nor 2")}

清晰无比。当 x 为 1 时,打印 x = 1;当 x 为 2 时,打印 x = 2;当上面的条件都不知足时,打印 x is neither 1 nor 2。

简化一下代码吧,咱们能轻易发现,当 x 为 1 或 2 时,执行的实际上是一个操做,因而咱们能够这样写:

 // 输入 xwhen (x) {
    //使用 "," 分隔多个条件
    1, 2 -> println("x = $x")
    else -> println("x is neither 1 nor 2")}

在这里,Kotlin 的 when 语句就已经比 switch 语句高出一截了,但它更强大的还在后面:

 // 输入 xwhen (x) {
    !is Int -> println("x is not integer")
    in 0..10 -> println("x is between 0 and 10")
    else -> println("x is over 10")}

看吧,咱们能够在判断条件里用两种高级的表达式:

  • is 和 !is:判断值是不是某个类的实例;

  • in 和 !in:判断值是否在某个区间、数组和集合内;

咱们还可使用不带参数的 when 语句,在至关程度上替代类 C 语言中的 if - else if - else 语句。

 // 输入 xwhen {
    x !is Int -> println("x is not Int")
    (x and 1) == 0 -> println("x is even")
    else -> println("x is odd")}

是否是比一大堆 if - else if - else 简洁多了?

一样,咱们也能够把 when 用做表达式:

 // 输入 xval isOdd = when {
    (x and 1) == 1 -> true
    else -> false}

与 if 语句用做表达式时的要求一致,when 语句用做表达式时必须有 else 部分,不然会出现编译错误。

相关文章
相关标签/搜索