進入控制流程 day 2, 昨天講了 if-else
, when
用於對單一變數進行後續行為的判斷,今天談談迴圈 (Loop)。對大多數讀者 (工程師?),我們所面對的資料往往都是成千上萬筆,這些資料往往會使用各式資料結構儲存,例如前面幾天提過集合的列表 (List)。對於使用這類資料結構的程式來說,如果我要一筆一筆分開來寫成不同段落,不僅無法面對巨量無盡的資料,更不具有撰寫效率與維護性。
for
val school = listOf("shark", "salmon", "minnow")
for (element in school) {
print(element + " ")
}
// shark salmon minnow
這裡 element in school
會讓 element
拿到每一個 school
列表裡面的元素,透過 for
迴圈的段落可以對每個一個 element
做操作。
for
+ index
for ((index, element) in school.withIndex()) {
println("Item at $index is $element\n")
}
// Item at 0 is shark
// Item at 1 is salmon
// Item at 2 is minnow
如果要同時對元素在列表中的位置 (index) 操作,則可以用 .withIndex()
在遍歷整個列表的時候同時回傳當前的位置,這時候回傳的執會變成一個 Pair<idx, element>
,我們可以用下面範例方法去最這樣的鍵值對操作。
do-while
, while
var bubbles = 0
while (bubbles < 50) {
bubbles++
}
println("$bubbles bubbles in the water\n")
do {
bubbles--
} while (bubbles > 50)
println("$bubbles bubbles in the water\n")
除了給定的範圍內做迴圈,我們也可以對一個對應條件被滿足情況下做持續迴:do-while
, while
。但這裡需要注意,因為這類的迴圈並沒有給定一個明確的迴圈範圍 (例如給定一個定長的集合,所以當條件持續被滿足他就會持續迴圈下去,可能會造成程式在沒有外力介入下不會停下。
至於 之間,前者會在進入迴圈前先完成一次迴圈內容再開始迴圈,這用法單純取決於使用情境,並無優劣之分。
repeat(times)
repeat(2) {
println("A fish is swimming")
}
// A fish is swimming
// A fish is swimming
在 Kotlin 中,repeat(times) 函式可以讓我們指定一段程式碼重複執行指定的次數。在上述範例中,程式碼區塊 println("A fish is swimming")
會被執行兩次,因為我們指定了 repeat(2)
。