2015/04/09
突然で申し訳ないのですけど、私は、以下のコードが嫌いです。
(defn tv-volume
"TVの音量は偶数で!"
[x]
(if (odd? x)
(inc x)
x))
嫌いな理由は、以下の通り。
x
を4回も書かなければならない。タイプミスの危険性がある。if
のelse
を書き忘れ、ni
lが返って不正な動きをする危険性がある。で、そんな時はやっぱり、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->>
はとっても便利だと思うんですよ。もし使ったことがないなら、使ってみませんか?