Kotlin的when、if 和循环语句

本文整理自: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 表示区间都是闭区间,包含首尾元素的

©️2020 CSDN 皮肤主题: 大白 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值