iT邦幫忙

2025 iThome 鐵人賽

DAY 13
0

「暖身差不多了,可以進行正式考驗了。」
小孩在半空中一揮手,浮現出一段新的程式碼。

「我先示範一個簡單的例子,用 for 迴圈計算一維陣列,也就是單排座位賣出了幾張票。至於 indices,就是 index(索引)的複數,意思是『所有索引』。」

    var count = 0
    for (i in seats.indices) {
        count += seats[i] // 等價於 count = count + seats[i]
    }

我有點心虛地舉手:「雖然有點不好意思,但⋯⋯什麼是 for 迴圈啊?」

小孩忍不住笑了:「當你需要對一系列資料重複做同樣的事時,就會用到 for 迴圈。像這裡,就是不停地用索引去取座位狀態,然後加總。」

聽懂原理後,我竟然比想像中還快就寫出了完整的二維版本:

    var count = 0
    for (i in seats.indices) {
        for (j in seats[i].indices) {
            count += seats[i][j]
        }
    }

「雖然你說這是正確答案,但這樣字好多,好累啊!」我抱怨著。

「有沒有更輕鬆的寫法?我聽學長說 Kotlin 有很多『小竅門』,用起來比其他語言更方便。」

「嗯哼,你是指『語法糖』吧。」小孩挑了挑眉,笑著糾正我,

「所謂的懶人包只是語法糖的一種設計而已。你最好還是先懂基本做法,因為不是所有程式語言都支援這些方便的語法。不過嘛,語法糖寫起來確實又甜又愉快——我示範給你看,只要一行就能完成。」

他打了一個響指,新的程式碼閃現了出來:

    val count = seats.sumOf { seatRow -> seatRow.sum() }

真的只有一行啊,不過⋯⋯是不是出現了新的符號?

「這個箭頭是什麼啊?⋯⋯應該是箭頭吧?」我先自信地喊出口,話尾卻又怯生生地收了回去。

「沒錯,是箭頭!這被稱為箭頭函式,也是一種語法糖,箭頭左邊,是我暫時幫每一排座位取的名字 seatRow;箭頭右邊,則是我要對這一排做的事——計算它的總和。最後,sumOf 會把每一排的總和再加起來,就得到整個影廳的總票數啦!是不是變得很簡單?」


上一篇
為什麼從 0 開始?
下一篇
突然好想玩撲克牌接龍
系列文
奶茶裡藏的資料結構(Kotlin範例)15
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言