谨以此记录自己的学习过程中感触较深的知识点!
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) // 2B:检测一个值在(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) //3C:检测一个值是(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
作者:kevinLY
链接:https://www.jianshu.com/p/5c69156ada11
點擊查看更多內容
為 TA 點贊
評論
評論
共同學習,寫下你的評論
評論加載中...
作者其他優質文章
正在加載中
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦