個人メモです。
- レシーバとは何か?
- レシーバとオブジェクトの違い
- 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"}