iT邦幫忙

2021 iThome 鐵人賽

DAY 14
1
Software Development

溫柔學姐的Kotlin補課/教學系列 第 14

重複的專家:迴圈 repeat , for loop, while loop, do while loop

  • 分享至 

  • xImage
  •  

下過雨的天空,星星特別明亮。

唯心提著包離開了研究室,今晚的補課依舊在空教室進行。

「還記得妳寫的重複十次Hello World!的程式嗎?」

詩憶點點頭。「記得學姐提過,有其他更好的方式可以實現。」

fun main() {
    println("Hello World!")
    println("Hello World!")
    println("Hello World!")
    //...省略中間重複行數
    println("Hello World!")
}

「嗯,這個方式就是迴圈,迴圈是重複的專家。不過Kotlin的迴圈不只一種,最簡單的是repeat。」唯心迅速地更新了程式碼。

fun main() {
    repeat(10) {
        println("Hello World!")
    }
}

原本需要十行的程式碼,現在只剩下三行。

「這⋯⋯真的是好簡單易懂啊。」詩憶驚喜的睜大眼睛。

「不過,這樣對次數的觀察不太直觀,所以我們就改成列印迴圈變數,數字也減到五次吧,可以直接用預設的名字it或是用->另外幫變數命名。」唯心把程式碼獨立成函式另外命名成repeat5

fun repeat5() {
    repeat(5) {
        println(it)
    }
}
fun repeat5index() {
    repeat(5) { index ->
        println(index)
    }
}

「印出來的迴圈變數是0, 1, 2, 3, 4,確實是五次。但是五其實也有很多種組合,在某些時候我們會希望的是 1, 2, 3, 4, 5,這時可以改用for搭配rangeTo()。」

詩憶重複看了好幾次程式碼。「嗯?學姐我沒在妳的程式碼裡看到rangeTo()函式啊?」

「喔,和之前說的四則運算子邏輯一樣,這個..符號就是rangeTo函式的簡寫。」唯心在程式上加上了註解。

fun for1to5() {
    for (index in 1..5) { //就是 1.rangeTo(5)
        println(index)
    }
}

for還可以跳著數、倒著數,比如十以下的奇數數量也是五。」唯心興致來了,舉出各種例子。

fun for1to10奇數() {
    for (index in 1..10 step 2) {
        println(index)
    }
}
fun for1to9倒著數奇數() {
    for (index in 9 downTo 1 step 2) {
        println(index)
    }
}

「有時候拿到的結束數字比範圍大,可以自行減掉再用剛剛的rangeTo()或是直接就用until,因為until不含上限。」

「什麼時候會結束數字比範圍大啊?」詩憶好奇地問。

唯心指了指最初的程式碼。「之前不是提到預設的索引是0開始嗎?所以相對於整個群體的數量,最後一個索引就是數量減一。」

fun for1until6() {
    for(index in 1 until 6) {
        println(index)
    }
}

「而另一種迴圈while,在做到和for同樣的事時,寫起來比較繁瑣,所以我們通常是用在for不能做到的地方,那就是只確定結束條件,不確定次數的情形。例如,需要等待其他函式回傳的結果來結束迴圈,所以也存在while(true)的設計,這時會搭配break跳出迴圈,咳。」

fun while5() {
    var index = 0
    while(index < 5) {
        println(index)
        index++
    }
}

詩憶聽唯心的嗓音有些沙啞,急忙倒出保溫瓶裡的溫水遞給她。

唯心喝了幾口溫水後休息了一會兒,才繼續說下去。

「最後一種迴圈do while,表面上和while結果相同,但是有一個相當特殊的特性,就是至少會跑一次,所以就算是while(false)這種極端的例子,也會印出0。」

fun dowhile5() {
    var index = 0
    do {
        println(index)
        index++
    } while(index < 5)
}

上一篇
危險氣息的研究室:尾遞迴 Tail Calls
下一篇
程式進化論:一行表達式 Single-expression functions
系列文
溫柔學姐的Kotlin補課/教學31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言