kotlin(2):控制流

控制流

1.if表达式

If可以返回一个值

使用:

val v = if(3>4) 5 else 1

    If的分支可以使代码块,最后的表达式作为该块的值,如果使用if作为表达式而不是语句,该表达式需要有else分支

2.when表达式

When取代了switch,不会顺序执行,when将参数和所有的分支条件顺序比较,直到某个分支满足条件,when既可以被当做表达式使用也可以当做语句使用,如果被当做表达式,符号条件的分支的值就是整个表达式的值,如果当做语句使用,则忽略个别分支的值(if一样,每一个分支可以是一个代码块,它的值是块中最后的表达式的值)

 如果其他分支都不满足条件就会求值else分支,如果when作为一个表达式使用,则必须有else分支,除非编译器能够检测出所有的可能情况都已经覆盖了.

如果很多分支需要用相同的方式处理,则可以把多个分支条件放在一起,用逗号分隔

when (x) {
 0, 1 -> print("x == 0 or x == 1")
 else -> print("otherwise")
}


可以使用任意表达式作为分支条件

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


也可以检测一个值在in或者不在!in一个区间或者集合中

when (x) {
 in 1..10 -> print("x is in the range")
 in validNumbers -> print("x is valid")
 !in 10..20 -> print("x is outside the range")
 else -> print("none of the above")
}


可以检测一个值是不是is !is一个特定类型的值,由于智能转换,可以访问该类型的方法和属性而无需任何额外的检测

fun hasPrefix(x: Any) = when(x) {
 is String -> x.startsWith("prefix")
 else -> false
}


When也可以取代if-else if 如果不提供参数,所有的分支条件都是简单的布尔表达式,当顺序执行的一个分支的条件为真的时候就执行该分支

val age = 16
when {
    true -> {print("age == 3")}//执行 并终止
    true -> {print("age == 2")}
    else -> {
        print("age is neither 3 nor 2")
    }
}
 


3.for循环

for循环可以对任何提供迭代器(iterator)的对象进行遍历

for(item in collection) print(item)


具有迭代器的对象需要的条件:

A.有一个成员函数或者扩展函数iterator()

B.有一个成员函数或者扩展函数next()

C.有一个成员函数或者扩展函数hasNext() 返回boolean

这三个函数都需要标记为operator

对数组的for循环会被编译为并不创建迭代器的基于索引的循环

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


或者可以用库函数withIndex:

for((index,value) in array.withIndex()) {
 Print(“$index is $value”)
}


4.while循环

java一样

5.跳转

kotlin中任何表达式都可以用标签来标记,标签的格式为标识符后跟@符号,例如:abc@

  

     a@  for (i in 1..100) {
        b@ for(j in 1..100) {
           if(i == 50) break@a
        }
     }

Kotlin有函数字面量,局部函数和对象表达式,因此kotlin的函数可以被嵌套,标签限制的return允许我们从外层函数返回,最重要的一个用途就是从lambda表达式中返回

fun foo(){
    val arr = arrayOf(1,2,3)
    arr.forEach{
        print(it)
        if (it == 2) return@forEach//结束的是forEach  会执行print(“end”)
    }
    print("end")
}


 

猜你喜欢

转载自blog.csdn.net/weixin_37699212/article/details/72731002
今日推荐