Kotlin的whenif 和循环语句
Posted 古月书斋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin的whenif 和循环语句相关的知识,希望对你有一定的参考价值。
本文整理自:https://chiclaim.blog.csdn.net/article/details/88624808
一. when语句
在 Java 中有 switch 语句,在 Kotlin 中使用 when 来代替 switch
1) when 的基本语法
when(parameter)
branch1 -> logic
branch2 -> logic
when 括号里是参数,参数是可选的。箭头(->) 左边是条件分支,右边是对应的逻辑体
when 不需要向 switch 那样需要加上 break 语句,符合条件自动具有 break 功能
如果逻辑体代码比较多,可以放到花括号()里:
when(parameter)
branch1 ->
//...
branch1 ->
//...
如果要组合多个分支,可以使用逗号(,)分隔分支:
when(parameter)
branch1,branch1 ->
//...
2) 枚举类对象作为 when 参数
fun getMnemonic(color: Color) = when (color)
Color.RED -> "Richard"
Color.ORANGE -> "Of"
Color.YELLOW -> "York"
Color.GREEN -> "Gave"
Color.BLUE -> "Battle"
Color.INDIGO -> "In"
Color.VIOLET -> "Vain"
需要注意的是,when 使用枚举对象作为参数,需要把该枚举类的所有对象列举完
所以 枚举对象作为 when 参数不需要 else 分支
3) 任意对象作为 when 参数
Kotlin 中的 when 比 Java 中的 switch 功能更强大
Java 的 switch 参数只能是 枚举常量、字符串、整型或整型的包装类型(浮点型不可以)
Kotlin 的 when 可以是任意对象:
fun mix(c1: Color, c2: Color) = when (setOf(c1, c2))
setOf(RED, YELLOW) -> ORANGE
setOf(YELLOW, BLUE) -> GREEN
setOf(BLUE, VIOLET) -> INDIGO
//需要处理 其他 情况
else -> throw Exception("Dirty color")
4) 无参数的 when 表达式
上面的 mix 函数比较低效,因为每次比较的时候都会创建一个或多个 set 集合
如果该函数调用频繁,会创建很多临时对象
可以使用无参的 when 表达式来改造下:
fun mixOptimized(c1: Color, c2: Color) = when
(c1 == RED && c2 == YELLOW) || (c1 == YELLOW && c2 == RED) ->
ORANGE
(c1 == YELLOW && c2 == BLUE) || (c1 == BLUE && c2 == YELLOW) ->
GREEN
(c1 == BLUE && c2 == VIOLET) || (c1 == VIOLET && c2 == BLUE) ->
INDIGO
else -> throw Exception("Dirty color")
无参数的 when 表达式的条件分支必须是 boolean 类型
5) 智能类型转换(smart casts)
在 Java 中对某个对象进行类型转换的时候时候,需要通过 instanceof 来判断是否可以被强转
void test(Object obj)
if (obj instanceof String)
String str = (String) obj;
str.substring(0, str.length() / 2);
//...
Kotlin 通过 is 关键字来判断类型,并且编译器会自动帮你做类型转换
fun test(obj: Any)
if (obj is String)
// 不需要手动做类型转换操作
obj.substring(0, obj.length / 2)
//...
二. if判断
if 表达式 用于条件判断,在 Kotlin 中 如果判断分支比较多,通常使用 when 来替代 if
fun test(obj: Any)
when (obj)
is String -> obj.substring(0, obj.length / 2)
is Type2 -> ignore
is Type3 -> ignore
三. while循环
Kotlin 中的 while 和 do…while 循环和 Java 没有什么区别
while (condition)
/*...*/
do
/*...*/
while (condition)
四. for循环
for 循环的语法和 Java 中的循环还是有些区别
// Java for 循环
for (int i = 0; i <= 100; i++)
System.out.println(i);
// 对应 Kotlin 版本
for(i in 0..100)
println(i)
使用 … 操作符 表示一个区间,该区间是闭区间,包含开始和结束的元素
然后使用 in 操作符来遍历这个区间
这个区间是从小到大的,如果开始的数字比结尾的还要大,则没有意义
如果想要表示 半闭区间 ,即只包含头部元素,不包含尾部
可以使用 until 操作符:
for(i in 0 until 100)
println(i)
如果想要倒序遍历,可以使用 downTo 关键字:
for(i in 100 downTo 0)
println(i)
遍历的时候 步长(step) 默认是 1,可以通过 step 关键字来指定步长
for( i in 100 downTo 0 step 2)
println(i)
操作符 … 和 downTo 表示区间都是闭区间,包含首尾元素的
以上是关于Kotlin的whenif 和循环语句的主要内容,如果未能解决你的问题,请参考以下文章