if式で気づいたこと
Lispはif式という偉大なる発明をした。
が、どういう訳か「if文」として世の中に広がっていってしまった。
来年に向けて、閏年でも判別してみる。
(define year 2007) (if (= (remainder year 4) 0) (display "閏年です。") (display "閏年ではありません。")) ; 閏年ではありません
奇妙な事にSchemeのif式は値を返す。
(display (if (= (remainder year 4) 0) "閏年です。" "閏年ではありません。")) ;閏年ではありません
displayを外に出せてスッキリした。Schemeには構文が無い。全てが式である。
慣れるとifが値を返すことが自然に思えてくる。
で、イマイチ理解に苦しんでいたRubyのifがようやく理解できた。
year = 2007 puts ( if (year % 4) == 0 "閏年です" else "閏年ではありません。" end ) # => 閏年ではありません
Rubyのifは値を返すので、Scheme風に書ける。そう、Rubyのifは「if式」なのだ。
やっと式と構文の違いを理解できるようになったと思う。
でも、普通はこう書かない。普通に書くなら、三項演算子。
puts (year % 4) == 0 ? "閏年です" : "閏年ではありません。" # => 閏年ではありません
三項演算子ラブ。
注意
あ、ホントの閏年判別は、もうちょっと複雑です。