kitak blog

Kみたいなエンジニアになりたいブログ

「初めてのRuby」読書会の補足(p28 オブジェクト指向編)

会社で@adarapata先輩のもと,新卒のエンジニア・デザイナーで「初めてのRuby」読書会をおこなっています.読書会の時間だけだと,どうして理解が浅くなってしまう部分もあるので掘り下げるための補足をブログで書いていこうと思います.

p.25のオブジェクト指向のくだり

このような例が出てきます(一部書き換えています).

p 1.class
p 1.object_id
p 1.methods

p "str".class

a = "str"
b = "str"
p a.object_id
p b.object_id
p a == b # true, メソッド呼び出し a.==(b)と同じ
p a.equal? b # false
p a.equal? a # true

オブジェクトはいろいろ知っている

Rubyでは全てがオブジェクトなので,数値も文字列もオブジェクトです.
この節の言いたいことを噛み砕くと「オブジェクトは自分自身のことを色々知っているんだよ」ということです.

  • classメソッドは,「私は誰(どのクラス)から生まれたの?」ということを教えてくれます.
  • object_idメソッドは,「私のマイナンバーは何?※」ということを教えてくれます.
  • methodsメソッドは,「私ができること(メソッド)のリスト」を教えてくれます.

この3つは氷山の一角で,他にもオブジェクトにあれこれ尋ねることができます.

※ 国民ひとりひとりに番号を割り振る国民総背番号制を使った例えです.保険証番号など「個人を識別できる番号」と考えてもらってもいいです.

「おなじ」を調べる

変数a, bに文字列"str"が代入されています.この2つ, 値は同じですが,オブジェクトとしては別物です.
現実世界で例えるとクローン技術で生まれてきた動物が良い例かもしれません.その動物(羊でも牛でもなんでもいいですが),見た目はまったくの瓜二つです.しかし,モノとして考えるとまったくの別物ですよね.
==メソッドは,「見た目が同じかどうか」調べるメソッド,equal?メソッドは「モノとして同じかどうか」調べるメソッドと考えることができます.
少しむずかしい言い方をすると前者が同値性を調べるメソッド,後者は同一性を調べるメソッドです.

まとめ

今日はp28のオブジェクト指向のくだりについて説明しました.この説明おかしいでしょっていう部分があったらコメントお願いします.

参考文献

初めてのRuby

初めてのRuby