Kotlin的when、if 和循环语句
本文整理自:https://chiclaim.blog.csdn.net/article/details/88624808
一. when语句
在 Java 中有 switch 语句,在 Kotlin 中使用 when 来代替 switch
1) when 的基本语法
when(parameter){branch1 -> logicbranch2 -> 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) ->INDIGOelse -> 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 -> ignoreis 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的when、if 和循环语句相关推荐
- Kotlin入门(7)循环语句的操作
上一篇文章介绍了简单分支与多路分支的实现,控制语句除了这两种条件分支之外,还有对循环处理的控制,那么本文接下来继续阐述Kotlin如何对循环语句进行操作. Koltin处理循环语句依旧采纳了for和w ...
- day1---while循环语句和练习
1 # -*- coding:utf-8 -*- 2 ''' 3 一.while循环语句: 4 while 条件(可以是比较运算,布尔值等): 5 循环体:(需要包含终止循环语句(否则就是死循环) 6 ...
- java for嵌套for循环语句_java中的for循环嵌套语句怎么执行?
展开全部 控制语句--for:语句的嵌套应用:累加求和,计数器:循环嵌套. 一.语62616964757a686964616fe58685e5aeb931333365646232句的嵌套应用 语句嵌套 ...
- 单片机c语言中的循环语句,单片机c语言教程:C51循环语句
循环语句是几乎每个程序都会用到的,它的作用就是用来实现需要反复进行多次的操 作.如一个 12M 的 51 芯片应用电路中要求实现 1 毫秒的延时,那么就要执行 1000 次空语句 才能达到延时的目的( ...
- 用python循环语句求素数_Python基础入门_3条件语句和迭代循环
Python 基础入门前两篇: Python 基础入门--简介和环境配置 Python基础入门_2基础语法和变量类型 这是第三篇内容,主要简单介绍条件语句和迭代循环语句,内容也比较简单,目录如下: 条 ...
- shell脚本求和_【零基础学云计算】Shell编程之case语句与循环语句
case多分支语句 循环语句 for循环语句 while循环语句 untli循环语句 Shell函数 Shell数组 case语句的结构 针对变量的不同取值,分别执行不同的命令序列 case 变量值 ...
- 用c语言循环语句,C语言中循环语句有哪些具体怎么用
C提供三种基本的循环语句:for语句.while语句和do-while语句. 一.for循环 for循环是开界的. 它的一般形式为: for(;;) 语句; 初始化总是一个赋值语句,它用来给循环控制变 ...
- python无限循环条件循环_Python - 条件控制、循环语句 - 第十二天
Python 条件控制.循环语句 end 关键字 关键字end可以用于将结果输出到同一行,或者在输出的末尾添加不同的字符,实例如下: Python 条件语句是通过一条或多条语句的执行结果(True 或 ...
- c语言中floox的头文件,PC-1211袖珍计算机在合成氨厂生产中的应用 第五讲 循环语句(FOR-NEXT语句)...
PC-1211袖珍计算机在合成氨厂生产中的应用 第五讲 循环语句(FOR-NEXT语句) 在化工生产中为了分析两个或两个以上参数对生产的影响往往需要进行某些有规律的重复计算.这些计算在程序中可以用赋值 ...
- 试过不用循环语句撸代码吗?
译者按: 通过使用数组的reduce.filter以及map方法来避免循环语句. 原文: Coding Tip: Try to Code Without Loops 译者: Fundebug 为了保证 ...
最新文章
- 【记录】入选《开发工具领域内容榜》第6名
- 给每个函数写一个记录日志的功能.
- Java NIO Selector 详解
- 神经科学家为视力受损的人研发新技术
- 51CTO第2本书样章曝光:DHCP服务器规划与应用案例
- python ftp 上传
- Ubuntu安装VMware Tools的方法
- 枚举与常量 java_java – 为什么两个枚举常量可以在同一行中使用?
- android 网络图片查看器,Handler的用法
- after markup mount - how is converted source code got executed
- 基站位置查询系统_木牛导航网络基站服务免费了!——更便捷、更高效、更省心!...
- 如果项目上线在上线期间出现BUG改怎么办?
- C# winform界面上传附件到服务器(springboot)
- 深度学习之卷积神经网络CNN及tensorflow代码实现示例详细介绍(转载)
- Centos中安装memcached
- C++ SHFileOperation实现文件、文件夹拷贝、删除、重命名
- 机器视觉之表面缺陷检测
- 用mysql征途改等级教程_征途各等级升级经验表附带功勋换经验比例
- adb命令重置_Android ADB 常用命令
- 生日快乐网页模板(HTML5+CSS3+JS)