Rubyのオブジェクトとは?
Yugui(ゆぐい) さんの「初めてのRuby」(2008年)という書籍を参考にRubyのオブジェクトとは何かを自分なりに解釈して、例えてみました。
今回は、Rubyとは何か、書籍ではオブジェクトをどのように記載しているのか、最後にわかりやすくまとめれたらと思います。
まずは、Rubyの内容ですが、手っ取り早くわかるにはこちらの記事を参考にすると良いと思います。
このプログラミング言語の大きな特徴はオブジェクト指向を採用しており、全てがオブジェクトということです。
つまり、今回の記事で紹介するオブジェクトはRubyを知る上で最初に学んでおくべき重要なことだと、思いませんか?
では、それほど重要なオブジェクトをYugui(ゆぐい) さんはどのように本書で書かれているのか下記に記載します。
アイデンティティを持っている: オブジェクトは自分が何者であるかを知っていて、自分とそうでないものを区別します。Rubyではobject_idメソッドによってオブジェクトの一意な番号を得ることができます。また、Rubyでは全てのオブジェクトは何らかのクラスに属します。オブジェクトは自分自身の所属クラスを知っていて、classメソッドによって問い合わせることができます。
メッセージを受け取る: オブジェクトにはメッセージを送ることができます。オブジェクトはそれを受け取ると対応するメソッド(手続き)を実行し、何らかの処理を行います。この意味で「メッセージ送信」を「メソッド呼び出し」とも呼ぶことがあります。
内部情報を持つ: オブジェクトは0個以上の内部状態を持ちます。例えば文字列は長さを内部状態として保持しています。内部状態はメソッドの実行によって変化することもあります。例えば文字列に文字を追加すると長さが変化します。
以上が、オブジェクトの3つの特徴になります。 それらを踏まえて自分なりにまとめると、「オブジェクトはキャラクター」なのだと思いました。
例えば、勇者は自分が勇者であることをわかっていて、魔王や王様、姫も勇者ではないことはわかっています。そして勇者は正義というclassに所属していて、王様や姫も同じです。
そして、勇者は王様から「魔王城から姫を救って欲しい」と王様からメッセージを受け取ると「魔王城に向けて旅をする」という処理を行います。
そして勇者には始めから、戦う力が備わっていて、経験値や装備などで力を変化します。
といった形で、例えて考えました。 皆さんはどう考えますか?
オブジェクトがキャラクターということはRubyは物語だとも考えられます。皆さんもRubyでWebアプリケーションなどを作りながら、物語も作ってはみませんか。
心配はいりません。西尾維新 さんの言葉で、「キャラクターが勝手に動き出す」のですから。