Kotlin——程序的基本逻辑结构之选择、循环和跳转基本语法(三)

引言

前一篇文章总结了Kotlin的基本数据类型,如果把程序比作一个有机体的话,基本数据只是构成一个躯壳,而没有灵魂的躯壳是意义不大的。同样的如果程序中没有控制逻辑很多情况下这程序是不完整的,因为不可能每一句代码之间都是从上往下逐句去执行,而程序中的灵魂就是我们的要讲的控制逻辑。

一、条件选择结构

Kotlin中条件选择结构主要有两种:if-else if -elsewhen

1、if-else if -else

在Kotlin中if-else if -else条件从句除了拥有Java 中if条件从句的所有功能,用法也大同小异,还有更高级的功能(类似Java中的三元运算符—— 条件 ? 条件值满足时返回的值 : 不满足时返回的值)。在Kotlin中if 是一个表达式,也就意味着他会返回值,且if的分支是还可以是代码块。最后需要注意:如果你使⽤ if 作为表达式⽽不是语句,该表达式必须有 else 分⽀配对

  • 传统用法
if(conditionexp){
    ...
}else if(conditionexp2){
    ...
}else{
    ...
}
    
  • 作为表达式使用,实现三元运算符功能
var a=9
var b=80
val max = if (a > b) a else b
println("max"+max)//输出 max 80
  • 作为表达式使用,分支使用代码块
 var a=9
 var b=80
 val max = if (a > b) {
 print("Choose a")
 a
 } else {
 print("Choose b")
 b
 }
 println("max"+max)//输出Choose bmax80

2、when 条件从句

when -else条件从句就相当于升级版的switch-case从句,运行逻辑大同小异。when 也将它的参数(也可以不提供参数)和各分⽀条件顺序⽐较,直到某个分⽀满⾜条件。和if 类似,when的分支条件可以是任意表达式(不只只是常量),不过需要注意的是,。如果when被用做表达式(必须有 else 分⽀), 符合条件的分⽀的值就是整个表达式的值;如果当做语句使⽤, 则忽略个别分⽀的值。(像 if ⼀样,每⼀个分⽀可以是⼀个代码块,它的值是块中最后的表达式的值),最后,如果其他分⽀都不满⾜条件将会求值 else 分⽀。

2.1、普通用法

 when (x) {
	   1 -> print("x == 1")
	   2 -> print("x == 2")
	   3,4 ->print("x == 3 /4")
	   else -> { // 注意这个块
	       ...
	   }
    }
  }

2.2、使用表达式作为分支条件

when (x) {
parseInt(s) -> print("s encodes x")
else -> print("s does not encode x")
}

2.3、使用when实现检测某个值是否在某个区间

    val x:Int=8
   when (x) {
	in 1..10 -> print("x is in the range")
	!in 10..20 -> print("x is outside the range")
	else -> print("none of the above")
}

2.4、 when不提供参数(相当于if-else if-else功能),所有的分⽀条件都是简单的布尔表达式,⽽当⼀个分⽀的条件为真时则执⾏该分⽀

val x:Int=8
    when {
	x>9 -> print("x >9 ")
	x<9 -> print("x > 9")
	else -> print("x is funny")
}

二、循环

在Kotlin中循环结构和Java功能一模一样,也拥有三种形式:for、while(condition)、do-while,用法也是一样的,也没有啥特别的。

1、for 循环

1.1、for循环可以循环遍历任何提供了迭代器的对象,迭代之后可以通过成员函数或者扩展函数 iterator() 获取它的返回类型,也可以通过成员函数或者扩展函数 next() 获取下一个值还可以通过并且成员函数或者扩展函数 hasNext() 判断是否遍历到尽头。

for (item in collection) print(item)

1.2、 for循环集合的索引遍历(这种“通过一个范围的迭代”形式在编译的时候会被优化而不会创建额外的对象。)

for (i in array.indices) {
print(array[i])
}

1.3、 使用withIndex完成遍历(形式在编译的时候会被优化而不会创建额外的对象。)

    val asc = Array(5, { i -> (i * i).toString() })
	//index,value为关键字
    for ((index, value) in asc.withIndex()) {
	    println("the element at $index is $value")
    }

2、 while和do-while

while (x > 0) {
x--
}

do {
val y = retrieveData()
} while (y != null) // y 在此处可⻅

三、跳转结构continue、break和return

continue、break、return结构功能用法和Java中的一样。

  • return——默认从最直接包围它的函数或者匿名函数返回。
  • break——终⽌当前层次的循环。
  • continue——跳出当前当次的循环,继续下⼀次循环

四、标签Label

在Kotlin中任何表达式都可以⽤标签(Label)来标记,使用标识符后跟@符号定义一个标签(即xxx@,例如:abc@ 、fooBar@ 都是有效的标签),使用**@后跟标识符引用**一个标签(@xxx)。其实呢标签就有点类似goto语句的作用,有点像通过外力来改变程序默认的逻辑而运行到定义标签处。
这里写图片描述
一般来说,标签通常是用于限制continue、break、return的调整,关于标签的更多使用后续再详解。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CrazyMo_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值