おはよーございます。
前回のRuby記事では数字の1はRubyの世界ではオブジェクトと呼びます、というところを学びました。
じゃあ、1+1の答えは2です。っていうのをRubyの世界ではどのように実現しているんだろう? っていうのを少し掘り下げて理解してみたくなり、再び探検に出かけました。
まずは計算から
まずはRubyで1+1の結果が2になるかを一応確かめてみます。
irb(main):001:0> 1+1 => 2
間違いなく2です。そりゃそうですよね😅
でもこの結果の「2」というのは、数字ではなくオブジェクトです。 Rubyの世界で置き換えると、1オブジェクトと1オブジェクトを「+」でつなぐと2というオブジェクトになるって感じでしょうか。
オブジェクトはクラスに所属しているというのがヒントになりそうだということで、リファレンスマニュアルを調べます。
「+」っていう名前のメソッドがある
1というオブジェクトが所属するクラス「Integer」のメソッドを調べてみると+という名前のメソッドがみつかります。Rubyでは足し算をメソッド呼び出しで実現しているようです。
メソッド呼び出しなのにドットがない!?
前回メソッドを呼び出すときにはドットを入れると理解したばかりなのに「+」メソッドを呼び出すときはドットを使ってないですよね。こりゃどういうことなんでしょ??
演算子式は利便性のためドットを省略できる
答えはまたしてもリファレンスマニュアルに書いてありました。
どうやらRubyが特別に許可したも記号たち(+とかーとか)は、ドットをつけなくても呼べるようにしてくれているようです。
逆にドットつけてもちゃんと動作するのか試してみました。
irb(main):002:0> 1.+1 => 2
同じ結果になりますね。こちらのほうがメソッド呼び出しをしてる感じは出ます。でも、ただの足し算として表現するなら、たしかにドットがないほうがわかりやすいですよね。
わかったこと
ということがわかりました。でもそうなってくるとなんで1というオブジェクトに1を与えると2が返ってくるんだ?という疑問が湧いたりします。なんでだ??とはいえひとまず今日はここまで。
まとめ
Rubyは全てオブジェクトで出来ているということ。オブジェクトにはメソッドがあるということ。この2つの仕組みが組み合わさってプログラムとして成立するということ。ただの足し算から、Rubyという世界の美しさに少し触れられた気がします。では、また!
お時間ありましたら、前回のRuby記事もあわせて読んでいただければと思います。 osio-toshimasa.hatenablog.com