测试环境:
- Kotlin 1.1.3
一、 if 判断语句
Kotlin 中的 if 与 java 中的稍微有些不一样,Kotlin 中的 if 除了可以作为语句之外,还可以作为表达式给变量或者方法赋值
1. 那我们就主要说下与 java 中不一样的地方,即:作为表达式(代替三元表达式)
- 给变量赋值
var age = if (a > b) a else b
- 给方法赋值
fun getMax2(a: Int, b: Int) = if (a > b) a else b
二、when 条件判断语句
kotlin 中的 when 是用来代替 java 中的 switch 的,但是它比 switch 强大的太多太多了,废话不多说,看例子
- 常规用法
fun switch(age: Int): Int {
when (age) {
1-> return 10
2 -> return 9
3 -> return 11
else -> {
return 20
}
}
}
switch 的分支条件必须为 数字 或者 常量、String,但是 when 的话,完全没限制,可以使用任意对象
- 区间形式的分支
fun switch(age: Int): Int {
when (age) {
//在 1 - 10 之间,包含开头和结尾
in 1..10 -> return 10
//在 1 - 10 之间,包含开头,不包含结尾
in 1 until 10 -> return 9
11 -> return 11
//多个分支条件放在一起,用逗号分隔
12, 13 -> return 13
//不在 1 - 13 的区间内
!in 1..13 -> return 14
//相当于 Switch 的 default
else -> {
return 20
}
}
}
- 不带参数的 when
fun switch(age: Int): Int {
when {
//在 1 - 10 之间,包含开头和结尾
age in 1..10 -> return 10
//在 1 - 10 之间,包含开头,不包含结尾
age in 1 until 10 -> return 9
age == 11 -> return 11
//不在 1 - 13 的区间内
age !in 1..13 -> return 14
//相当于 Switch 的 default
else -> {
return 20
}
}
}
- 类型检测
fun hasPrefix(x: Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}
等等……
- when 还可以用来代替 if-eles if - eles ,就是因为可以使用不带参数的 when ,所有的分支条件都是简单的布尔表达式,而当一个分支的条件为真时则执行该分支:
when {
x.isOdd() -> print("x is odd")
x.isEven() -> print("x is even")
else -> print("x is funny")
}