1
Help us understand the problem. What are the problem?

posted at

updated at

Ruby の nil は無か?

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

  1. ちなみに NilClass はインスタンスをただ一つしか持てないことが保証されています。そのただ一つのオブジェクトが nil です。 

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
1
Help us understand the problem. What are the problem?