「null 啊⋯⋯」小孩托著下巴思考,慢慢解釋道:「當問號成立,那就是 null 的狀態;反過來,就是非 null 的狀態。非 null 的時候,有時候會用驚嘆號來標記,不過驚嘆號的意思和問號又不太一樣就是了。」
「竟然驚嘆號也會出現在程式碼裡啊⋯⋯」我有點想笑。
「對啊,程式語言設計的時候,大概想把各種符號都塞進去吧。」他聳聳肩,「不過你看,如果不用問號,像剛剛 enqueue 的那段程式碼,就會變成這樣,打起來多麻煩啊。」
//tail?.next = newNode ?: run { head = newNode }
if (tail != null) {
tail.next = newNode
} else {
head = newNode
}
我比對了一下,突然恍然大悟:「啊!所以說,?.
的情境是『非 null 的狀態比較重要』,但是像 if (head == null)
這種情境就是反過來,所以才不能用 ?.
,對吧!」
「沒錯,答對了。」小孩點點頭。
在我還沉浸於小小成就感時,小孩已經把 peek 的程式碼隨手寫完,然後停下來盯著我看。
「要不要自己試試寫 isEmpty 呢?」他壞笑著,把機會推到我面前。
「行啦,我試試看!」我深吸一口氣,硬著頭皮動筆。
寫完之後,我皺著眉,心裡有些沒底:「嗯⋯⋯我在猶豫,到底是哪個才是對的。」
「給我看看。」
fun isEmpty(): Boolean = head == null //看櫃檯前面有沒有隊伍的頭。
fun isEmpty(): Boolean = tail == null //看有沒有隊伍尾巴
小孩輕輕拍了拍我的肩膀,露出一個意味深長的笑容:「多給自己一點信心吧,兩個寫法其實都是對的。」
接著他雙手一攤,像是宣告結局般宣布:「好了,既然你完成了這次的考驗,那就——下次見囉!」
話音剛落,他忽然伸手輕輕一推。
「等等,什麼叫下次見——?!」我驚慌大喊,但還沒等到答案,眼前的景象便迅速扭曲、遠去,意識也跟著滑入黑暗之中⋯⋯