谨以此记录自己的学习过程中感触较深的知识点!
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 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦