4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby の nil は無か?

Last updated at Posted at 2020-12-13

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

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?