Kotlin 条件控制知识(三)

Kotlin 条件控制知识

      • if操作符
      • 使用区间
      • when 三种情况
          • 类似于switch
          • 不带参数,类似于 if-else-if
          • 直接返回赋值
      • for循环
        • 带索引的遍历
        • 遍历map
      • while && do...while
      • 返回、跳转
      • 标签限制跳转

if操作符

  • 三元操作符 val c = if (condition) a else b
  • if表达式结果赋值给变量 val max = if(a>b){ a} else {b}

使用区间

 var a = 10
 if (  a in 1..10){
  ... // 成立
}

if ( a !in 1..5){
  ... // 成立
}

when 三种情况

类似于switch
num1 = 25
    num2 = 22
    when (num1){
        10 -> print("num1 is 10")
        20 -> print("num1 is 20")
        12,13 -> print("num1 is 12 or 13")     // 多个条件
        in 20..30 -> print("num1 is in 20-30") // 支持区间判断
        is Int ->print("num1 is Int")             // 判断是否是某个类型
        else -> print("num1 is $num1")        //类似default
    }
不带参数,类似于 if-else-if
when{    
        num1 in 10..20 -> print("$num1 is in 10-20" )    
        num2 in 10..25 -> print("$num2 is in 10-25" )
}
直接返回赋值
max = when{ 
    num1 > num2  -> num1   
    else -> {     
         num2     // 作为返回值 必须有 else 分支
    }
}

for循环

  • for (item in collection) print(item)
  • 代码块
for (item: Int in ints) {
     ...
 }

带索引的遍历

for (i in array.indices) {
     array[i] = ...
 }
 
 // 或者
 
 for((index,value) in array.withIndex()){
        println("index is $index , value  is $value")
 }

遍历map

for ((k, v) in map) {
    println("$k -> $v")
}

while && do…while

和java一样

返回、跳转

  • return。默认从最直接包围它的函数或者匿名函数返回。
  • break。终止最直接包围它的循环。
  • continue。继续下一次最直接包围它的循环。

标签限制跳转

  • 任何表达式之前都可以
  • @后面加标识符
break continue return
跳转到该标签指定循环后面的执行点 指定循环的下一次迭代 返回到标签处
fun foo() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return@forEach 
        // 局部返回到该 lambda 表达式的调用者,即    forEach 循环
        print(it)
    }
    print(" done with implicit label")
}
// output: 1245 done with implicit label

多重for循环:

outer@ for ( out in 1..5){  
    println("outer $out")   
    for (inner in 1..5){   
        println("inner $inner")   
        for (insideInner in 1..5){   
            if(insideInner % 2 == 0){ 
                break@outer            
            }            
            println("insideInner $insideInner")     
        }    
    }
}
// output :
outer 1
inner 1
inner2 1
// output without @outer mark
outer 1
inner 1
insideInner 1
inner 2
insideInner 1
inner 3
insideInner 1
inner 4
insideInner 1
inner 5
insideInner 1
outer 2
...
// end

  • return@a 1 :从标签@a 处返回1

你可能感兴趣的:(Kotlin学习之路)