Kotlin之逻辑控制:when
逻辑控制:顺序、条件、循环条件语句when条件语句kotlin中的when类似于Java中的switch,但是又远比switch强大的多先说一下Java中switch的问题:只能传入整型或者短于整型的变量作为条件,JDK1.7之后增加了对字符串的支持每一条判断语句都要在最后主动加上一个break,否则会执行下一个case,当然这也有利有弊,可以利用这种特性实现一些功能,但是在维护的过程中很容易出问
逻辑控制:顺序、条件、循环
条件语句
when条件语句
kotlin中的when类似于Java中的switch,但是又远比switch强大的多
先说一下Java中switch的问题:
-
只能传入整型或者短于整型的变量作为条件,JDK1.7之后增加了对字符串的支持
-
每一条判断语句都要在最后主动加上一个break,否则会执行下一个case,当然这也有利有弊,可以利用这种特性实现一些功能,但是在维护的过程中很容易出问题
kotlin中的when不仅仅解决了上述的痛点,还增加了许多强大的新特性
编写一个成绩查询的功能,输入名字返回结果
fun getScore(name: String) = if (name == "Tom") {
89
} else if (name == "Jim") {
77
} else if (name == "Jack") {
98
} else {
0
}
写完这些编译器就不乐意了:Cascade if should be replaced with when
我们根据提示使用when来代替:
fun getScore(name: String) = when (name) {
"Tom" -> 89
"Jim" -> 77
"Jack" -> 98
else -> 0
}
when语句和if一样,是有返回值的,我们仍然可以使用单行代码的语法糖
when语句允许传入一个任意类型的参数,然后when的结构体中定义一系列的条件,格式是:
匹配值 -> { 执行逻辑 }
当执行逻辑只有一行的时候,{}可以省略
除精确匹配之外,when还允许进行类型匹配:
fun checkNumber(num: Number) {
when(num) {
is Int -> print("int")
is Double -> print("double")
else -> print("not support")
}
}
Number: 是kotlin中内置的一个抽象类,Int、Long、Float、Double 等与数字相关的类都是他的子类
上述代码中,is关键字的作用相当于Java中的instanceof关键字
以上为when的基本用法,但是when还有一种不带参数的用法,虽然这种可能不太常用,但是有点时候能发货很强的拓展性
不带参数的写法:
fun getScore(name: String) = when {
name == "Tom" -> 89
name == "Jim" -> 77
name == "Jack" -> 98
else -> 0
}
重要的事情说三遍!!!
kotlin中判断字符串或者对象是否相等可以直接使用 ==
kotlin中判断字符串或者对象是否相等可以直接使用 ==
kotlin中判断字符串或者对象是否相等可以直接使用 ==
假设名字以Tom开头的人的分数全是89,使用when就无法实现,使用不带参数的when就可以:
fun getScore(name: String) = when {
name.startsWith("Tom") -> 89
name == "Jim" -> 77
name == "Jack" -> 98
else -> 0
}

欢迎关注这个不是技术号的公众号,我们聊聊别的。
更多推荐



所有评论(0)