nil? blank? empty?の検証
nil? blank? empty?の使い分け
似てるけど全然違う、使い分けが曖昧だったのでまとめてみます。0、nil、""(空文字)、" "(空白)、{}(空ハッシュ)、[](空配列)
を例にして検証してみます。
nil?
nilの場合のみtrueになります。
それ以外はfalseです。
pry(main)> 0.nil? => false pry(main)> nil.nil? => true pry(main)> "".nil? => false pry(main)> " ".nil? => false pry(main)> {}.nil? => false pry(main)> [].nil? => false
empty?
空の文字列、配列、ハッシュの場合trueになります。
空白の時はfalseになります。
nil、0にはエラーが発生します。
pry(main)> 0.empty? NoMethodError: undefined method `empty?' for 0:Integer pry(main)> nil.empty? NoMethodError: undefined method `empty?' for nil:NilClass pry(main)> "".empty? => true pry(main)> " ".empty? => false pry(main)> {}.empty? => true pry(main)> [].empty? => true
blank?
0の時はfalseになります。
その他は全てtrueになります。
pry(main)> 0.blank? => false pry(main)> nil.blank? => true pry(main)> "".blank? => true pry(main)> " ".blank? => true pry(main)> {}.blank? => true pry(main)> [].blank? => true
blank?の反対の使い方ができるpresent?というメソッドも紹介しておきます。
present?
!blank?
と同じ意味です。
pry(main)> 0.present? => true pry(main)> nil.present? => false pry(main)> "".present? => false pry(main)> " ".present? => false pry(main)> {}.present? => false pry(main)> [].present? => false
nil? blank? empty?で0はどうなるのか
私は今回の実装でArticle.count
で記事数が0ならという条件分岐を作ろう思っていました。しかし上記3つのメソッドを使おうとしてもinteger型の識別まではできませんでした。
最初はArticle.count == 0
と実装していたのですが、他にも書き方としてzero?
というメソッドもあるようです。
参考 : ruby: nil? empty? blank? どれも0をチェックしない - kinopyo blog