Kotlin 迴圈控制 (For, While)

Kotlin 的迴圈語法非常直覺,尤其是 for 迴圈,它主要用來歷遍 (Iterate) 任何提供了 Iterator 的物件(如 Range, Array, Collection)。

For 迴圈

Kotlin 沒有傳統 C 語言風格的 for (i=0; i<10; i++)。取而代之的是 for-in

遍歷範圍 (Range)

// 1 到 5 (包含 5)
for (i in 1..5) {
    println(i) // 1, 2, 3, 4, 5
}

// 1 到 4 (不包含 5)
for (i in 1 until 5) {
    println(i) // 1, 2, 3, 4
}

倒數與間隔

// 倒數:6, 4, 2, 0
for (i in 6 downTo 0 step 2) {
    println(i)
}

遍歷陣列/集合

val fruits = listOf("Apple", "Banana", "Cherry")

for (item in fruits) {
    println(item)
}

// 同時要 Index 和 Value
for ((index, value) in fruits.withIndex()) {
    println("Item at $index is $value")
}

遍歷 Map

Kotlin 讓遍歷 Map 變得非常優雅,就像在用 Python 一樣:

val ages = mapOf("Miko" to 18, "John" to 30)

for ((name, age) in ages) {
    println("$name is $age years old")
}

重複 N 次 (repeat)

如果你只是單純想執行某段程式碼 N 次,不需要 Index,repeat 函式是最乾淨的選擇。

repeat(3) {
    println("Hello") // 印出 3 次
}

函數式迴圈 (forEach)

除了傳統的 for,Kotlin 的集合庫也提供了 forEach,搭配 Lambda 使用更現代。

fruits.forEach { fruit ->
    println(fruit)
}

// 搭配方法參考更簡潔
fruits.forEach(::println)

While 與 Do-While

這部分跟 Java 與 C 語言完全一樣。

var x = 5
while (x > 0) {
    println(x)
    x--
}

// do-while 保證至少執行一次
do {
    val y = retrieveData()
} while (y != null) 

跳出迴圈 (break 與 continue)

Kotlin 支援標準的 break (跳出整個迴圈) 和 continue (跳過本次)。

標籤 (Labels)

在巢狀迴圈中,有時候我們想直接跳出 外層 迴圈。 Kotlin 允許你定義標籤 (label@)。

outer@ for (i in 1..100) {
    for (j in 1..100) {
        if (i * j > 1000) break@outer // 直接結束最外層迴圈
    }
}