Kotlin条件控制-When
2018-09-20 本文已影响3人
kevinLY
谨以此记录自己的学习过程中感触较深的知识点!
When
when 会将它的参数和每个条件比较,直到找到一个合适的分支,否则会走默认分支(else)
when既可以被(1)、当做表达式使用;如果被当做表达式,符合条件的分支值就是这个表达式的值;(2)、也可以被当做语句使用。
(1)、当做表达式使用 [另:C、检测一个值是(is)或者不是(!is)一个特定类型的值]
fun test() {
fun hasPrefix(x:Any) = when(x) {
is String -> x.startsWith("prefix")
else -> false
}
val x1 = hasPrefix(5)
print(x1) ///false
val x2 = hasPrefix("3")
print(x2) ///false
val x3 = hasPrefix("prefix123")
print(x3) ///true
val x = 1
val s = "asas"
val res = when {
x in 1..10 -> "cheap"
s.contains("hello") -> "it's a welcome!"
else -> ""
}
print(res) //cheap
}
(2)、语句使用
A:类似于Switch使用
val x4 = 1;
var x5 = 1;
when(x4) {
1 -> x5 = 2
2 -> x5 = 2
else -> {
x5 = 5
}
}
print(x5) // 2
另一种写法:
val x4 = 1;
var x5 = 1;
when(x4) {
1,2 -> x5 = 2
else -> {
x5 = 5
}
}
print(x5) // 2
B:检测一个值在(in)或者不在(!in)一个区间或者集合中
val x4 = 1;
var x5 = 1;
when(x4) {
!in 3..4 -> x5 = 3
in 1..2 -> x5 = 2
else -> {
x5 = 5
}
}
print(x5) //3
C:检测一个值是(is)或者不是(!is)一个特定类型的值
D:when 也可以用来取代 if-else if链。 如果不提供参数,所有的分支条件都是简单的布尔表达式,
而当一个分支的条件为真时则执行该分支:
fun isString(x:Any) = when(x) {
x is String -> true
else -> false
}
fun isInt(x:Any) = when(x) {
x is Int -> true
else -> false
}
when {
isString("string") -> print("x is String")
isInt("4") -> print("x is Int")
else -> print("x is not String not Int")
}
// x is String