【Rails】nil? empty? blank? present? 比較してみた

nil? empty? blank? present? 比較表

nil? empty? blank? present?
nil true NoMethodError true false
true false NoMethodError false true
false false NoMethodError true false
0 false NoMethodError false true
123
数字
false NoMethodError false true
''
false true true false
' '
スペース
false false true false
'string'
文字列
false false false true
[]
空配列
false true true false
['dog', 'cat']
配列
false false false true
{}
ハッシュ(空)
false true true false
{:key => value}
ハッシュ
false false false true

nil?

値がnilの場合はtrue、それ以外はすべてfalseと判定する。

empty?

配列や文字列、ハッシュの値が空である場合にtrueと判定する。特徴的なのが、文字列のスペース(' ')に対してfalseと判定するところ。スペースも存在してるんだと認める女神的な?メソッド。ただし、値が空かどうか既に明白なもの(nil、true、false、数字)に対して行うとエラー発生させる厳しい側面もある。

blank?

英語「blank」の意味は「白紙、空、虚ろな」といったイメージ。そのイメージ通りfalse、空の配列、空の文字列(スペースも含む)をtrueと判定する。

present?

present?は、blank?と真逆。

まとめ f:id:haru89:20200419123533j:plain:w70

blank?とempty?ってややこしい。blank?の方が使い勝手がよさそう。empty?と違ってエラーが起きる心配も少ないし。でも意識して使い分けることができれば、コードの理解が深まる気がする。

参考

rubyの真偽判定メソッド(nil?/empty?/blank?/present?)を検証してみた結果、興味深いことがわかった - Qiita