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
です。 ↩