美文网首页程序员
Kotlin基础篇:when的使用

Kotlin基础篇:when的使用

作者: 小院里栽棵树 | 来源:发表于2020-07-02 20:04 被阅读0次

when在Java中是循环语句,但在Kotlin中它代表的可不是循环语句,而是和Java中的switch case有着一样功能的条件语句,下面我们来看下when在Kotlin中的具体用法吧。

when的普通用法和switch一样:

fun log(str: String) {
    when (str) {
        "0" -> print("数字0")
        "A" -> print("字母A")
    }
}

我们都知道在Java中switch语句的分支条件必须是常量,那Kotlin的when语句是不是也有一样的限制呢?答案显然是没有限制,下面就给大家列出when可以做到但switch做不到的功能吧。

  • when的分支条件可以为任意表达式
    示例1:
fun log(any: Any) {
    when (any) {
        //分支条件为常量
        "1" -> print("输入的内容为数字1")

        //分支条件为boolean值
        is String -> print("输入的内容是String类型的任意变量")

        //分支条件为集合
        setOf("0", "A") -> print("输入的内容是数字0和字母A的集合")

        //分支条件为枚举类中常量的字段
        Person.Dad.personName -> print("输入的内容是枚举类Person中变量Dad的姓名") 
    }
}

通过示例1我们可以看到,when可以接收任意表达式为分支条件,而switch只能接收常量为分支条件,显然when语句在功能实现上会大大提高我们的效率和代码可读性。

  • when可以不带任何参数
    示例2:
fun log(any: Any) {
    when {
        any is Int -> print("输入的内容是Int类型的任意变量")
        any is String -> print("输入的内容是String类型的任意变量")
    }
}

通过示例2我们可以看到,when语句是可以不带任何参数的,但要注意的一点是,当when语句无参时,分支条件必须是任意的boolean表达式

看完了when表达式的条件判断功能,接下来我们再看下它的其它功能。以上的示例,分支体都只是一句代码,但当我们分支逻辑复杂的时候,我们肯定是要使用代码块作为分支体的,那么当分支体是代码块的时候,又会有什么不同呢?

fun log(num: Int): Int = when {
    num < 0 -> abs(num)
    num < 10 -> num + 2
    else -> {
        print("当前值大于10,需返回")
        num * 2
    }
}

在这里我们可以看到,当代码块作为分支体的情况下,代码块中的最后一个表达式就是返回结果,这里告诉大家一个规则——"代码块最后的表达式就是结果",在所有使用代码块并期望得到一个结果的地方都是成立的,我们会在后面函数相关的文章中和大家再深入的探讨一下这个规则。

以上就是when表达式在Kotlin中的具体使用了,如果有什么不懂的地方,你可以...再读一遍! 下篇文章见,我是小院里栽颗树~~

相关文章

网友评论

    本文标题:Kotlin基础篇:when的使用

    本文链接:https://www.haomeiwen.com/subject/mdprqktx.html