欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-05-19 15:56:39
...

引言

前一篇文章总结了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 分⽀。

  • 普通用法
 when (x) {
       1 -> print("x == 1")
       2 -> print("x == 2")
       3,4 ->print("x == 3 /4")
       else -> { // 注意这个块
           ...
       }
    }
  }
  • 使用表达式作为分支条件
when (x) {
parseInt(s) -> print("s encodes x")
else -> print("s does not encode x")
}
  • 使用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")
}
  • 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,用法也是一样的,也没有啥特别的。

  • for 可以循环遍历任何提供了迭代器的对象,迭代之后可以通过成员函数或者扩展函数 iterator() 获取它的返回类型,也可以通过成员函数或者扩展函数 next() 获取下一个值还可以通过并且成员函数或者扩展函数 hasNext() 判断是否遍历到尽头。
for (item in collection) print(item)
  • for循环集合的索引遍历(这种“通过一个范围的迭代”形式在编译的时候会被优化而不会创建额外的对象。)
for (i in array.indices) {
print(array[i])
}
  • 使用withIndex完成遍历(形式在编译的时候会被优化而不会创建额外的对象。)
    val asc = Array(5, { i -> (i * i).toString() })
    //index,value为关键字
    for ((index, value) in asc.withIndex()) {
        println("the element at $index is $value")
    }
  • 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)来标记,使用标识符后跟@符号定义一个标签(即aaa@qq.com,例如:aaa@qq.com 、aaa@qq.com 都是有效的标签),使用@后跟标识符引用一个标签(@xxx)。其实呢标签就有点类似goto语句的作用,有点像通过外力来改变程序默认的逻辑而运行到定义标签处。
Kotlin——程序的基本逻辑结构之选择、循环和跳转基本语法
一般来说,标签通常是用于限制continue、break、return的调整,关于标签的更多使用后续再详解。