個人メモです。
- レシーバとは何か?
- レシーバとオブジェクトの違い
- RubyとJavaScriptのオブジェクトの違い
レシーバとは何か?
メソッドの左側のデータをレシーバと呼ぶ。
レシーバ.メソッド
レシーバの例
-
obj.lengthのobj、 -
arr.present?のarrをレシーバと呼ぶ。
## レシーバとオブジェクトの違い
Rubyにおけるオブジェクトはすべてのデータのこと。
なので、以下はすべてオブジェクトとなる。
オブジェクトの例
100"String"{:a=>1, :b=>2}[1, 2, 3]-
obj = {:a=>1, :b=>2}のobj -
arr = [1, 2, 3]のarr -
range = 1..3のrange
つまり、レシーバとはメソッドの対象になったオブジェクトのことを指す。
## RubyとJavaScriptのオブジェクトの違い 一番混乱したのがコレ。JSとRubyでオブジェクトの定義が異なる。
JSの場合
JSのオブジェクトとは、KV(キー、バリュー)のペアであるプロパティを持ったデータのこと。
例: obj = {a:1, b:2, c:"xxx"}
Rubyの場合
Rubyの場合はすべてのデータをオブジェクトと呼ぶ。
JSでいうオブジェクトはRubyではハッシュとなる。
▼ハッシュ(キーが文字列の場合)
JSのオブジェクトのプロパティ名を文字列にしたもの。
例: obj = {"a" => 1, "b" => 2, "c" => "xxx"}
**▼ハッシュ(キーがシンボルの場合)** JSのオブジェクトのプロパティ名をシンボルにしたもの。
例: obj = {:a => 1, :b => 2, :c => "xxx"}
JSのように、`obj = {a:1, b:2, c:"xxx"}` と定義すると、自動でシンボルの形に変換される。
ruby
obj = {a:1, b:2, c:"xxx"}
=> {:a=>1, :b=>2, :c=>"xxx"}