Kotlin学习 - 选择控制if 和when

Kotlin中的选择控制有两种方式:ifwhen

if选择语句

Kotlin的if语句和Java中的类似:

fun max(a: Int, b: Int): Int {
    return if (a > b) a else b
}

只有一行语句可以省略大括号,返回类型可自动推导出来,所以最后可以写成

fun max(a: Int, b: Int) = if (a > b) a else b

多条语句分支,Kotlin的if语句必须要有else,因为Kotlin编译器会强制检查默认选项 ,不然会报错。

fun getScore(name: String) = if (name == "Tom") "不及格"
else if (name == "Jim") "及格"
else if (name == "Pony") "良好"
else if (name == "Tony") "优秀"
else "名字非法"

Kotlin中 == 等价的是Java中equals比较的是对象中的内容, ===等价Java中==,比较的是对象的地址。

when选择语句

修改上面的例子,如果 when 作为一个表达式使用,则必须有 else 分支, 因为Kotlin编译器会强制检查默认选项 ,除非编译器能够检测出所有的可能情况都已经覆盖了。

fun getScore(name: String) = when(name) {
    "Tom" -> "不及格"
    "Jim" -> "及格"
    "Pony" -> "良好"
    "Tony" -> "优秀"
    else -> "名字非法"
}

when中参数可以省略,判断改成布尔类型:

fun getScore(name: String) = when {
    name == "Tom" -> "不及格"
    name == "Jim" -> "及格"
    name == "Pony" -> "良好"
    name == "Tony" -> "优秀"
    else -> "名字非法"
}

-> 后还可以有多行语句:

fun getScore(name: String) = when {
    //若name以Tom开头则命中此分支
    name.startsWith("Tom") -> {
        //处理
        println("你好,我是Tom开头的同学")
        "不及格"
    }
    name == "Jim" -> "及格"
    name == "Pony" -> "良好"
    name == "Tony" -> "优秀"
    else -> "名字非法"
}

分支条件可以是:Int对象,区间,方法,字符串,对象等

when (x) {
    0, 1 -> print("x == 0 or x == 1")
    in 2 -> print("x == 2")
    in 3..8 -> print("x == 3..8")
    parseInt(s)-> print("parseInt")
    is String -> print("x is String")
    else -> print("otherwise")
}

参考:
Kotlin学习-基础篇(一)
Kotlin基础学习-入门篇

你可能感兴趣的:(kotlin,kotlin,学习,android)