条件语句:if和when
kotlin有两种条件语句一种是熟知的if条件语句,另一种是新颖的when条件语句。开发过程中更推荐使用when替代层层if判断,代码会更简洁。
1、if
if条件参数类型为布尔类型,只有true和false两种。
if (条件) {
//
}if...else...常见的
if (condition1) {
//
}else {
//
}可以简写成:
if (condition) a else b可以多重嵌套if...else if...else...语句
if (condition1) {
//
} else if (condition2) {
//
} else {
//
}条件判断除了简单的直接用Boolean条件,还能使用关键字 in 判断值是否在指定区间或者数组集合中。
var array = arrayOf(1, 2, 34, 4)
if (2 in array) {
//如果2在数组array中
}if直接返回值
val result = if (isRight) {
0
} else {
1
}而不必像下面那样:
if(isRight){
result = 0
}else{
result = 1
}2、when
when语句类似于Java中的switch语句。但是比Java中的switch要强大的多,switch判断的参数只能是枚举常量、字符串或者数字字面值。Kotlin中的when可以传入任何参数用来判断。
2.1、带参数的when
when(值){...}:值和哪个分支匹配则执行哪个分支,其中else的作用相当于Java中switch的default分支兜底。
例:
var value = 2
when (value) {
1 -> println(1)
2 -> println(2)
else -> println("")
}除了常量还可以使用任意对象作为判断参数,比如枚举组合,枚举相关Kotlin语法见枚举。
例:
fun mixColor(c1: COLOR, c2: COLOR) = {
when (setOf(c1, c2)) {
setOf(COLOR.RED, COLOR.ORANGE) -> ""
setOf(COLOR.GREEN, COLOR.ORANGE) -> ""
setOf(COLOR.RED, COLOR.BLUE) -> ""
setOf(COLOR.VIOLET, COLOR.YELLOW) -> ""
else -> "?"
}
}
enum class COLOR(val red: Int, val green: Int, val blue: Int) {
RED(255, 0, 0), ORANGE(255, 1165, 0), YELLOW(255, 255, 0),
GREEN(0, 255, 0), BLUE(0, 0, 255), VIOLET(238, 130, 238)
}每个条件判断不一定非得是固定的值,也可以判断是否在一个区间内。关于区间参考区间 ..
例:
var value = 2
when (value) {
in 2..10 -> println(2) //如果value只在2~10之间则执行该分支
else -> println("")
}2.2、不带参数的when
when{...}:不提供参数,所有的分支条件都是简单的布尔表达式
例:
when {
false -> println("false")
true -> println("true")
else -> println("other?")
}有了上面的例子就可以发散思维:
fun isEqual(c1: COLOR, c2: COLOR) = {
when {
c1 == c2 -> "true"
c1 != c2 -> "false"
else -> "?"
}
}学习资料:

