Clojureのcond->とcond->>は、とっても便利だと思うんですよ

2015/04/09


突然で申し訳ないのですけど、私は、以下のコードが嫌いです。

(defn tv-volume
  "TVの音量は偶数で!"
  [x]
  (if (odd? x)
    (inc x)
    x))

嫌いな理由は、以下の通り。

で、そんな時はやっぱり、cond->cond->>なわけですよ。

(defn tv-volume
  "TVの音量は偶数。特定の場合に特定の操作で、それ以外はそのままにしたいなら、cond->かcond->>で!"
  [x]
  (cond-> x
    (odd? x) (inc)))

cond->は、条件が真になった場合は指定された処理を->を経由して呼び出します。上のコードの場合は、(odd? x)な場合は(-> x (inc))になるわけで、だから結果として(inc x)が実行されるというわけ。xを書く数は3回に減ったし、elseの書き忘れがないので意図しないnilが返る危険性もありません。

というわけで、cond->cond->>はとっても便利だと思うんですよ。もし使ったことがないなら、使ってみませんか?