dependency injection with Clojure

July 12, 2017

寫 clojure 的時候,雖然套用了 REPL-driven development 的開發方式,已經相對可以讓大多數的函數很快地做過測試。但是,隨著要開發的專案愈來愈大,還是一樣需要用標準的寫法來寫單元測試 (unit test) 。有一個非正規的統計,如果是 Ruby on Rail 的專案,一般而言,90% 的函數都是有副作用的。然而, clojure 語言的專案,往往只有 40% 的函數帶有副作用。

即使是寫 clojure 語言,還是會遇到有 side effect 的函數,那比較好的寫法是怎麼樣呢?

Continue reading →

groupby

May 21, 2017

一開始是我在寫 4clojure 的練習題的時候,寫到了一個題目,要重新實現 clojure 語言的 groupby 函數。我糾結了好一陣子,又查了不少資料,才勉強用 reduce 寫出來。然而,最近卻在工作中,用上了 groupby 。

(fn f [k coll]
  (reduce
    (fn [c v]
      (update-in c [(k v)] (fnil conj []) v))
    {} coll))

Continue reading →

pattern

February 28, 2017

patterns = programming with abstactions that are not powerful enough

先來引述一下 Paul Graham 的句子

Continue reading →