對於 nil 的種種思考

歷史

在 Java, null 被認為是百萬美元的設計錯誤: 因為造成了無數次的系統崩潰和沒有必要的例外扔出。

NIL punning (Or Null Pointers considered not so bad)

在 Lisp 家族, nil 這個值有兩種意義: 假值 (false) 或是空的串列 (empty list)。之所以要叫做「雙關語 (punning)」是因為, nil 可以在不同的背景中代表不同的意涵。

不同於 Java 的設計, nil 值在 Clojure 並沒有這麼糟,因為它有下列的特性:

  1. 它是一個「值」 。所以許多 clojure 的函數可以對其產生作用。如果誤用了它,通常是產生 type error ,而不是 Null Pointer Exception。
  2. 它被精心設計成在數種 Clojure 裡最重要的幾個高階抽象層,表達有意義的意涵:空的 list, 空的 map, false 。等等。
  3. nil 在最初就被視為是 Clojure 語言正常的一部分。而不是需要被檢查的錯誤情況、例外情況。

參考資料: nil-punning 參考資料: Robust Clojure

results matching ""

    No results matching ""