【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?と真逆。
まとめ
blank?とempty?ってややこしい。blank?の方が使い勝手がよさそう。empty?と違ってエラーが起きる心配も少ないし。でも意識して使い分けることができれば、コードの理解が深まる気がする。
参考
rubyの真偽判定メソッド(nil?/empty?/blank?/present?)を検証してみた結果、興味深いことがわかった - Qiita