値の有無で真偽値を返すようなメソッドを作る際にnil?
とempty?
の違いが分からなかったので調べました。
結論
nil?
は存在しているか、empty?
は空かどうかで真偽値を返す
nil?
当たり前だけどnil
のみtrue
を返す。
''.nil? => false [].nil? => false false.nil? => false nil.nil? => true
一応クラスの確認。FalseClassの存在をはじめて知った。
''.class => String [].class => Array false.class => FalseClass nil.class => NilClass
つまりNilClassの時のみtrue
を返す。
empty?
オブジェクトという入れ物に対して空の場合のみtrue
を返す。false
とnil
に関しては入れ物ではないのでエラーになる。
''.empty? => true [].empty? => true false.empty? => `<main>': undefined method `empty?' for false:FalseClass (NoMethodError) nil.empty? => `<main>': undefined method `empty?' for nil:NilClass (NoMethodError)
brank? とpresent?
Railsに用意されているメソッド。 Railsのプラクティスに入ったら学び直すので、メソッドの内容に関しては割愛。
まとめ
RubyとRailsのメソッドの記憶がごっちゃになっていた。 改めて整理してスッキリしたけど、そもそもメソッド名で分かるやん...ということに気付いた笑 名前重要!!
追記
Railsのメソッドを含めた?系メソッドについて新たにまとめて直しました。
RubyとRailsの?系メソッドのまとめ - 時々とおまわり
参照
Object#nil? (Ruby 3.1 リファレンスマニュアル)
String#empty? (Ruby 3.1 リファレンスマニュアル)
Array#empty? (Ruby 3.1 リファレンスマニュアル)
class NilClass (Ruby 3.1 リファレンスマニュアル)