【Kotlin】流程控制

little_fat_sheep發表於2024-04-06

1 選擇結構

​ Kotlin 中選擇結構主要包含 if -else、when 語句,並且可以返回結果。

1.1 if-else

1.1. 條件選擇

fun main() {
    var score = 85
    if (score >= 90) {
        println("優秀")
    } else if (score >= 80) {
        println("良好")
    } else if (score >= 60) {
        println("及格")
    } else {
        println("不及格")
    }
}

​ 說明:如果 {} 裡只有一條語句,可以省略 {},if-else 語句可以巢狀使用,其他流程控制語句也可以巢狀使用。

1.1.2 條件返回

​ if-else 語句也可以作為結果判斷。

1)單行案例

fun main() {
    var score = 85
    var res = if (score > 60) "及格" else "不及格"
}

2)多行案例

fun main() {
    var score = 85
    var res = if (score > 60) {
        println("恭喜您透過考試")
        "及格"
    } else {
        println("歡迎下次光臨")
        "不及格"
    }
    println(res) // 及格
}

​ 列印結果如下。

img

​ 說明:返回結果需要放在 {} 中的最後一行,否則返回的是 Unit。

1.2 when

1.2.1 條件選擇

​ when 語句與 Java 中 switch 語句類似。

1)簡單案例

fun main() {
    var grade = 'B'
    when(grade) {
        'A' -> {
            println("優秀")
        }
        'B' -> {
            println("良好")
        }
        'C' -> {
            println("及格")
        }
        else -> {
            println("不及格")
        }
    }
}

​ 說明:如果 {} 裡只有一條語句,可以省略 {}。

2)多分支合併

fun main() {
    var grade = 'B'
    when(grade) {
        'A','B','C' -> println("及格")
        else -> println("不及格")
    }
}

1.2.2 條件返回

​ when 語句也可以作為結果判斷。

1)簡單案例

fun main() {
    var grade = 'B'
    var res = when(grade) {
        'A' -> {
            println("你真棒")
            "優秀"
        }
        else -> {
            println("加油")
            "及格"
        }
    }
    println(res)
}

​ 列印結果如下。

img

​ 說明:返回結果需要放在 {} 中的最後一行,否則返回的是 Unit。

2)範圍分支

fun main() {
    var score = 85
    var res = when(score) {
        in 90..100 -> "優秀"
        in 80..<90 -> "良好"
        in 60..<80 -> "良好"
        else -> "不及格"
    }
    println(res) // "良好"
}

2 迴圈結構

​ Kotlin 中迴圈結構主要包含 for、while、do-while 迴圈結構。另外,continue 語句可以控制跳過某次迴圈,break 語句可以控制跳出迴圈體。

2.1 for

​ for 迴圈可以對任何提供迭代器(iterator)的物件進行遍歷。

1)遍歷整數範圍(IntRange、IntProgression)

fun main() {
    for (i in 1..5) {
        println(i) // 列印: 1、2、3、4、5
    }
    for (i in 5 downTo 1) {
        println(i) // 列印: 5、4、3、2、1
    }
    for (i in 1..<5 step 2) {
        println(i) // 列印: 1、3
    }
}

2)遍歷陣列 / 列表

fun main() {
    var items = arrayOf("aa", "bb", "cc")
    // var items = listOf("aa", "bb", "cc")
    for (item in items) {
        println(item) // 列印: aa、bb、cc
    }
    for (index in items.indices) {
        println("items[$index]=${items[index]}") // 列印: items[0]=aa、items[1]=bb、items[2]=cc
    }
    for ((index, item) in items.withIndex()) {
        println("items[$index]=$item") // 列印: items[0]=aa、items[1]=bb、items[2]=cc
    }
}

2.2 while

fun main() {
    var i = 0
    while(i < 5) {
        println(i)
        i++
    }
}

2.3 do-while

fun main() {
    var i = 0
    do {
        println(i)
        i++
    } while (i < 5)
}

2.4 continue

​ 使用 continue 語句,可以跳過迴圈體中 continue 後面的語句,繼續執行下一輪迴圈。

1)單層迴圈

fun main() {
    for (i in 1..5) {
        if (i == 3) continue
        println(i) // 列印: 1、2、4、5
    }
}

2)多層迴圈

fun main() {
    label@ for (i in 1..3) {
        for (j in 4..6) {
            if (j == 5) continue@label
            println("($i,$j)") // 列印: (1,4)、(2,4)、(3,4)
        }
    }
}

​ 說明:label 可以修改為任何符合變數命名規範的名字。

2.5 break

​ 使用 break 語句,可以跳出迴圈體,繼續執行迴圈體後面的語句。

1)單層迴圈

fun main() {
    for (i in 1..5) {
        if (i == 3) break
        println(i) // 列印: 1、2
    }
}

2)多層迴圈

fun main() {
    label@ for (i in 1..3) {
        for (j in 4..6) {
            if (j == 5) break@label
            println("($i,$j)") // 列印: (1,4)
        }
    }
}

​ 說明:label 可以修改為任何符合變數命名規範的名字。

​ 宣告:本文轉自【Kotlin】流程控制