天天看点

Kotlin 控制流篇Kotlin 控制流篇

Kotlin 控制流篇

文章目录

  • Kotlin 控制流篇
    • 前言
    • 正文
      • 控制流(IF、when、for、while)
        • 1. IF 表达式
        • 2. while 表达式
        • 3. when 表达式
        • 4. kotlin for 语句,step 步长、downTo 递减
        • 5. 使用区间 range
      • 返回和跳转
        • 1. return 配合 ?:
        • 2. kotlin 的标签

前言

正文

控制流(IF、when、for、while)

1. IF 表达式

// 传统用法
var max = a 
if (a < b) max = b

// With else 
var max: Int
if (a > b) {
    max = a
} else {
    max = b
}
 
// 作为表达式
val max = if (a > b) a else b
//简化方法
fun maxOf(a: Int, b: Int) = if (a > b) a else b
           

2. while 表达式

val items = listOf("apple", "banana", "kiwifruit")
var index = 0
while (index < items.size) {
    println("item at $index is ${items[index]}")
    index++
}
           

3. when 表达式

//when 取代 switch
// 类似 Java 的switch case
switch(x){
    case 1: 
        System.out.println("1");
        break;
    default: break;
}

when (x) {
    1 -> println("1")
    else -> { // 注意这个块
        print("x is neither 1 nor 2")
    }
}



//[1] 类似 java 的 switch case ,但是会自动补上 break
when(x){
    1 -> {}
    2 -> {}
    // [3] 多个条件,同份逻辑
    3,4 -> {}
    // [4] in 监测是否在区间内
    in 10..20 -> {}
    // [5] not in
    !in 21..25 -> {}
    // [6] 使用 is 进行特定类型监测
    is String -> {}
    else -> {}
}

//[2] when 可以有返回值
val value:Int = when(x) {
    1 -> { x+1 }
    2 -> { x+ 2}
    else -> { x+ 5}
}
           

4. kotlin for 语句,step 步长、downTo 递减

//[1] for 遍历
val range2:IntRange = 0 until 100
for (i in range2){
    print("$i _")
}

//[2] step 设置步长
val range2:IntRange = 0 until 100
for (i in range2 step 2){
    print("$i _")
}

//[3] downTo 递减区间
for(i in 4 downTo 1){}
           

5. 使用区间 range

//[1] in 运算符检测数字是否在区间
val x = 10
val y = 9
if (x in 1..y+1) {
    println("fits in range")
}

//[2] !in 检测不在
if (-1 !in 0..list.lastIndex) {
    println("-1 is out of range")
}

//[3] step 跳步迭代
for (x in 1..10 step 2) {
    print(x)
}
println()

//[4] downTo 降区间
for (x in 9 downTo 0 step 3) {
    print(x)
}
           

返回和跳转

1. return 配合 ?:

//[1] 不存在则返回
val s = person.name ?: return


           

2. kotlin 的标签

//[2] 表达式可添加标签,如 [email protected] 、[email protected]
[email protected] for (i in 1..100) {
    // ……
}

//[3] 标签限制 break 、continue
[email protected] for (i in 1..100) {
    for (j in 1..100) {
        if (……) break@loop
    }
}

//[4] 输出 1245
fun foo() {
    listOf(1, 2, 3, 4, 5).forEach {
        if (it == 3) return@forEach // 局部返回到该 lambda 表达式的调用者,即 forEach 循环
        print(it)
    }
    print(" done with implicit label")
}