Rubyのcaseって

同僚のコードで見たんだけど

case
when t < Time.now.last_month.beginning_of_month
  '先月以前'
when t < Time.now.beginning_of_month
  '今月以前'
when t < Time.now.next_month.beginning_of_month
  '来月以前'
else
  '未来'
end

caseって対象オブジェクトなくてもいいんすね。驚いた。Rubyのパーサ空気読みすぎ。if/elsifでいいじゃん、というのは皆様に代わって私が突っ込んでおきました。


とりあえず比較対照が何か分からないと気持ち悪いので、これも試してみた。

case
when NilClass
  'nil'
else
  'not nil'
end

結果は「nil」。ふむ、やはり。


ついでに、別の同僚に教えてもらったイディオム。

(t < Time.now.last_month.beginning_of_month) ? '先月以前' \
: (t < Time.now.beginning_of_month) ? '今月以前' \
: (t < Time.now.next_month.beginning_of_month) ? '来月以前' \
: '未来'

こっちの方が好きだな。
¥なしですんだらもっといいんだけど。