對於 nil 的種種思考
歷史
在 Java, null 被認為是百萬美元的設計錯誤: 因為造成了無數次的系統崩潰和沒有必要的例外扔出。
NIL punning (Or Null Pointers considered not so bad)
在 Lisp 家族, nil 這個值有兩種意義: 假值 (false) 或是空的串列 (empty list)。之所以要叫做「雙關語 (punning)」是因為, nil 可以在不同的背景中代表不同的意涵。
不同於 Java 的設計, nil 值在 Clojure 並沒有這麼糟,因為它有下列的特性:
- 它是一個「值」 。所以許多 clojure 的函數可以對其產生作用。如果誤用了它,通常是產生 type error ,而不是 Null Pointer Exception。
- 它被精心設計成在數種 Clojure 裡最重要的幾個高階抽象層,表達有意義的意涵:空的 list, 空的 map, false 。等等。
- nil 在最初就被視為是 Clojure 語言正常的一部分。而不是需要被檢查的錯誤情況、例外情況。