「我大概知道你的程度了。看在這是第一個考驗,我就手把手帶你過吧。」小孩嘆了口氣。
「要填空的地方,就是程式裡標了 //todo 的四個地方,也就是四個 function。」
小孩指著 enqueue todo 的位置說道:「這裡要寫出怎麼把新來的人加到隊伍尾巴。」
「什麼意思?不是直接加嗎?」怎麼一開始就搞複雜?雖然說直接加的程式碼我也不會寫就是了。
「哎呀,怎麼會有什麼『直接』呢?我們平常的每個選擇,不都是在釐清前提後才做出的嗎?」他手一揮,奶茶店前面的人瞬間消失無蹤。「你看,像這種情形,你要去哪找隊伍尾巴?」
「這種時候直接去櫃檯點單,不用排隊啊。」我尷尬的說。
「不是唷,其實你還是有排隊,只是你是隊伍的第一個人罷了。」小孩哼哼。「而且你剛剛說了『這種時候』,對吧?所以你也知道,人可以根據經驗,在條件下做出不同判斷;AI也可以,因為有人塞了一堆人類的資料給他;但是這種單純的程式可不行,你得一個個的告訴他你的判斷準則。」
小孩敲了幾下,更新了 enqueue 的內容。
fun enqueue(element: T) {
val newNode = Node(element) //新人來了
tail?.next = newNode ?: run { head = newNode } // 看看有沒有 tail ?: 有的話排他後面,沒有就當隊伍第一人。
tail = newNode //隊伍尾巴換成新人
}
我看到裡面每行都有中文的說明,是小孩為了配合我才寫的吧。
雖然我有些地方想問,但小孩已經把目光移動到下個 todo 的位置。「dequeue 這裏就是讓隊伍最前面點完單的人離開,然後讓他後面的人往前遞補。」
fun dequeue(): T? {
val value = head?.value //記住點單
head = head?.next //下一個人遞補
if (head == null) tail = null //如果沒人遞補,那就是隊伍尾巴也沒人了
return value //把點單給櫃檯
}
「為什麼這次沒用問號了,null又是什麼?」趁他還沒下一段,我趕緊發問。