Qiita の Ruby の記事で,nil に関してしばしば誤解を招く表現が見られます。
変数の値が nil であったり,メソッドの返り値が nil であることを
- オブジェクトが無い
- 値が無い
- 何も無い
などと。
また,プログラミングスクールの記事でも,例えば
Rubyのnil判定を行う方法を現役エンジニアが解説【初心者向け】 | TechAcademyマガジン
には
nilとは、存在しない、何も無いという意味です。
などと書かれています。「何も無い」わけじゃありません。せめて
nilは何かが存在しないことを表すために用いられるオブジェクトです。
くらいの書き方にしてほしかった。
Ruby の nil はれっきとしたオブジェクトです。NilClass というクラスのインスタンスです1。
nil はオブジェクトなのでメソッドにも反応するし,メソッドに引数で渡したり,変数に代入したり,演算子のオペランドにしたり,配列の要素にしたりもできます。
その点では他のオブジェクトと何ら変わりません。
ただ,用途として「期待したものが存在しなかった」ことなどなどを表す,というだけなのです。
具体的には,「あー,オレ,長さ 3 の配列なんだよねー,だからインデックス 5 の要素をくれとか言われても,そんなもん持ってないから nil 返しとくわー」などという場合ですね。
ary = ["Apple", "Banana", "Cherry"]
p ary[5] # => nil
-
ちなみに
NilClassはインスタンスをただ一つしか持てないことが保証されています。そのただ一つのオブジェクトがnilです。 ↩