kotlin中的流程控制分为顺序结构、分支结构以及循环结构。顺序结构顾名思义,就是按照从上到下顺序的执行,中间没有跳转。
-
顺序结构
分支结构包括if分支和when分支结构。其中,if分支使用布尔表达式或者布尔值作为分支条件进行分支控制;when分支适用于更复杂的条件。
(1) if分支
大体上与java的if分支结构相似。常见的几种形式如下://没有else分支 if (expression) { statements... }
//有else分支 if (expression) { statements... } else { statements... }
//有else if 分支(else if可以有多个) if (expression) { statements... } else if (expression) { statements... } ... else { statements... }
一般if、else if、else 后边的花括号可以省略,这样默认if、else if 、else后边紧跟的一条语句就是该分支的代码块执行体,当执行体不只一行代码时,省略后就会出现逻辑问题。开发中,很多时候会因为这种小的问题而耽误宝贵的时间,因此,建议保留后边的花括号,增强程序可读性。
//此代码为错误示例 var age = 20 if (age > 14) println("年龄大于14") //println(“不是小孩子了,该理解下父母的心情了”)//这一行如果不注释,不管age是都少,将会执行,但是 //继续向下执行时,会报错,因为此时下边的else就和上边的if没有任何关系了,else不能没有if单独存在。 else println("年龄小于或等于14") println("孩子还小,不懂事")//因为省略饿花括号,不管age是都少,都会打印“孩子还小,不懂事”
kotlin中的if分支可以作为表达式使用。例如:
var temperature = 26; var str = if ( temperature > 26) "室内温度超过26度了,太热了" else if (temperature < 26) "温度低于26度,空调关一会吧" else "26度适合我睡觉" println(str)//程序输出结果 "26度适合我睡觉",代码块的最后一个表达式的值就是整个代码块的值
-
when分支
kotlin中的when其实可以理解为是对java中的switch的扩展,在语法格式上稍微加以改变,不再需要case,而是用“->”来替代。下边举个例子来对比一下。//java switch示例 switch(season){ case "Spring": System.out.println("这是春天"); break; case "Summer": System.out.println("这是夏天"); break; case "Spring": System.out.println("这是秋天"); break; case "Spring": System.out.println("这是冬天"); break; default: System.out.println("这不是季节");
对比一下,用kotlin来写这段逻辑,代码如下:
when(season) { "Spring" -> println("这是春天") "Summer" -> println("这是夏天") "Autumn" -> println("这是秋天") "Winter" -> println("这是冬天") else -> println("这不是季节") }
总结一下kotlin when较java switch的变化:
1)kotlin不适用case关键字
2)case值后的冒号,改为使用箭头 ->
3) default改为else
when表达式
这点与if相同。符合条件的分支的代码块的值就是整个表达式的值,该代码块的值就是块中最后的表达式的值。需要注意的是,if和when分支作为表达式来使用的话都是需要有返回值的。
var season = "Spring"
var str = when(season) {
"Spring" -> {
println("这是春天")
println("这是播种的季节")
"春天来了"
}
"Summer" -> println("这是夏天")
"Autumn" -> {
println("这是秋天")
println("这是收获的季节")
"秋天来了"
}
"Winter" -> println("这是冬天")
else -> println("这不是季节")
}
println(str)
//输出结果为
"这是春天"
"这是播种的季节"
"春天来了"
//前两句不用解释,满足条件的代码块里执行的打印语句,最后的"春天来了"是作为when整个表达式的值,打印出来的
when分支处理范围
结合in、!in 运算符,来检查表达式是否处于某个区间中。
```
var score = 67
var level = when (score) {
in 0 .. 59 -> "不及格"
in 60 .. 69 -> "了"
in 70 .. 79 -> "可"
in 80 .. 89 -> "良"
in 90 .. 100 -> "优"
else -> "分数不在合理范围"
}
println(level)
//输出结果为 “了”
```
此外when还可以结合is、!is对when表达式的类型进行判断暂不举例说明。