「暖身差不多了,可以進行正式考驗了。」
小孩在半空中一揮手,浮現出一段新的程式碼。
「我先示範一個簡單的例子,用 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 會把每一排的總和再加起來,就得到整個影廳的總票數啦!是不是變得很簡單?」