irbでオブジェクトに何者(クラス)かを聞いてみる

Rubyは「万物」がオブジェクトといわれるように、オブジェクトを理解することが重要なプログラミング言語です。irbではオブジェクトに自分が何者かを確認することができるので、その挙動をみていきましょう。

オブジェクトに何者(クラス)かを聞いてみる

irbでの実行結果だと想定してください。

>"名前".class
=> String # "名前"はStringクラス

数字についても確認してみましょう。

>1.class
=> Integer # 1はInteger(整数)クラス

またオブジェクトはすべてがobject_idという固有の番号をもっています。これは一意の値です。

>"名前".object_id
=> 70310917434480 # "名前"のobject_idは70310917434480

ちなみに整数の1を試してみるとこちらの通りです。

>1.object_id
=> 3

注意点

先ほどの"氏名"と1をもう一度実行してみましょう。

>"名前".object_id
=> 70310922524400
>1.object_id
=> 3

1のほうは変わりませんが、"名前"のほうはidが変わっていますね。これはどういうことなのでしょうか。
Rubyコードは下記の特性を持っています。

  • "名前"というオブジェクトに対して用意される文字列オブジェクトは、Rubyコードが実行されるたびに、別のオブジェクトが作られる
  • 1というオブジェクトに対して用意される数値オブジェクトは、何回1を実行しても同じ数値オブジェクトが提供される

この特性から1度目の"名前"オブジェクトと、2度目の"名前"オブジェクトは同じに見えますが、オブジェクトとしては別だということがわかりますね。数値の1は2回とも同じオブジェクトというわけです。
オブジェクトが同じということと、データの内容や中身が同じというのは別の概念になるので注意が必要です。