nil?とempty?の違い

値の有無で真偽値を返すようなメソッドを作る際に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 を返す。falsenilに関しては入れ物ではないのでエラーになる。

''.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のプラクティスに入ったら学び直すので、メソッドの内容に関しては割愛。

まとめ

RubyRailsのメソッドの記憶がごっちゃになっていた。 改めて整理してスッキリしたけど、そもそもメソッド名で分かるやん...ということに気付いた笑 名前重要!!

追記

Railsのメソッドを含めた?系メソッドについて新たにまとめて直しました。

RubyとRailsの?系メソッドのまとめ - 時々とおまわり

参照

Object#nil? (Ruby 3.1 リファレンスマニュアル)

String#empty? (Ruby 3.1 リファレンスマニュアル)

Array#empty? (Ruby 3.1 リファレンスマニュアル)

class NilClass (Ruby 3.1 リファレンスマニュアル)

class FalseClass (Ruby 3.1 リファレンスマニュアル)

nil? empty? blank? present? の使い分け - Qiita