空値判定メソッドいろいろ

Rails において、nil?empty?blank?present? はオブジェクトの中身を判定する便利なメソッドだが、使い分けが難しいのでまとめる。

nil?メソッド

レシーバがnilであるときtrueを返す。

nil.nil?      # => true
"abc".nil?    # => false
0.nil?        # => false
[].nil?       # => false

empty? メソッド

レシーバが"", [], {}のとき、trueを返す。
(空のときtrueになる)

"".empty?     # => true
[].empty?     # => true
{}.empty?     # => true
"abc".empty?  # => false
[1, 2, 3].empty?  # => false

blank?メソッド

blank? メソッドは、レシーバが
falsenilに加えて、空っぽいオブジェクト("", " ", [], {})
trueになる

nil.blank?    # => true
"".blank?     # => true
"  ".blank?   # => true
[].blank?     # => true
{}.blank?     # => true
false.blank?  # => true

present? メソッド

blank? メソッドの真偽反転版で、
オブジェクトが偽または空でない値を持っている場合にtrueを返す。

nil.present?    # => false
"".present?     # => false
"  ".present?   # => false
"abc".present?  # => true
[1, 2, 3].present?  # => true