Kotlin——流程控制

kotlin中的流程控制分为顺序结构、分支结构以及循环结构。顺序结构顾名思义,就是按照从上到下顺序的执行,中间没有跳转。

  1. 顺序结构
    分支结构包括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度适合我睡觉",代码块的最后一个表达式的值就是整个代码块的值
    
  2. 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表达式的类型进行判断暂不举例说明。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值