ある日時フィールドstartについて、現在時刻より前かどうかを判定する必要があったが、そのフィールドがnilになる場合がある。
とりあえず正直に書いてみた。
def past? if start.present? start < Time.current else false end end
これでプルリク出したらレビューでstart&.< Time.current
で書けるよと教えてもらった。
これはぼっち演算子と言われるもので「xxx が nil でないときにメソッドyyyを呼び出す」とのこと。
Rubyで使われる記号の意味(正規表現の複雑な記号は除く) (Ruby 2.5.0)
一応の注意点としてぼっち演算子で書いた場合、startがnilだとstart&.< Time.current
の返り値はfalse
ではなくnil
になる。
しかし、Rubyは「false」と「nil」だけが false
であとは全部 true
なので基本的には問題はなさそう。
冗長なコードが短くなってスッキリ。
def past? start&.< Time.current end
プロを目指す人のためのRuby入門 言語仕様からテスト駆動開発・デバッグ技法まで (Software Design plusシリーズ)
- 作者: 伊藤淳一
- 出版社/メーカー: 技術評論社
- 発売日: 2017/11/25
- メディア: 大型本
- この商品を含むブログを見る