clojure備忘録[clojureの基本的な特殊形式 その4(if特殊形式)]

お腹いっぱいかもしれませんが一応。
if特殊形式は、条件分岐のフロー制御を行います。


表記

(if predicate-form then-form else-form)

既に説明済みですが、評価順序は次のようになります。


1.まずpredicate-formが評価される。
2.1の結果が真ならば、then-formが評価される。else-formは評価されない。
3.1の結果が偽ならば、else-formが評価される。then-formは評価されない。

つまり、then-formとelse-formがともに評価されることはありえません。


実例

条件式がfalseの場合はelse-formに相当する「(/ 1 0)」でゼロ除算が発生します。

user=> (if false (/ 1 2) (/ 1 0))
ArithmeticException Divide by zero  clojure.lang.Numbers.divide (Numbers.java:156)
user=> 

条件式がtrueになると、then-formしか評価されない為、ゼロ除算は発生せず、「(/ 1 2)」のみが評価され正常に終了します。

user=> (if true (/ 1 2) (/ 1 0))
1/2
user=>