Just do IT

思うは招く

Ruby の nil ってなんだ?

Rubynil とはなんぞや?

  • Rubyのメソッド
  • 何も存在しないということを表す、NilClassのオブジェクト
  • Rubyでは、false または nil であれば偽として判定される
# 空オブジェクトではfalseになる
irb(main):011:0> ary = []
irb(main):012:0> ary.nil?
=> false

# nil を代入したらtrueになる
irb(main):013:0> ary = nil
irb(main):014:0> ary.nil?
=> true

aryは空オブジェクトではあるものの、入れ物自体は存在はしているため、nilではない。よってnil?メソッドで判定するとfalseになる。「中身は空っぽでも、入れ物自体が存在したら、そのオブジェクトはnilではない」という意味。

一方、nilを代入したら当然nilになる。nil?メソッドで判定するとtrueになる。この場合、2個目のaryは「存在しないよ。なにこれ?」と判定されている。

もうひとつの例

# 空文字列を入れた変数はfalseになる
irb(main):015:0> str = ""
irb(main):016:0> str.nil?
=> false

# emptyは当然true
irb(main):017:0> str.empty?
=> true

strに文字列は代入されていないが、これも入れ物自体は存在するため、nil?メソッドで判定するとfalseになる。

ちなみに、str.empty?で空なのかを確認するとtrueになる。文字列という入れ物を代入しているが、中身は空っぽなのでempty?メソッドで判定するとtrueになるということ。

ちなみに、NilClassのオブジェクトにはempty?メソッドは存在しない。

irb(main):021:0> hoge = nil
irb(main):022:0> hoge.empty?
NoMethodError (undefined method `empty?' for nil:NilClass)

参考