Railsによく出てくるシンボル、ハッシュについて
結論
{OO: OO}は、ハッシュのキーとしてシンボルを用いた形である。
そして、
{OO: :OO} は、キーがシンボルで値もシンボルであるハッシュのことを指している。
これについて以下で詳しく調べてみる。
シンボルって何?
文字列の先頭に:(コロン)がついているオブジェクトのことを指す。
Stringオブジェクトが文字列を表すのに対して、Symbolオブジェクトは名前を表すものと理解しておく。
1 シンボルは書き換えられない
文字列は書き換えることができるが、シンボルは変更不可である。
2 同じobject_idが割り当てられる
シンボルは同じobject_idが割り当てられるので、以下の通り2つのオブジェクトは同一である。しかし、文字列は2つのオブジェクトは等しいが同一ではない。
# 文字列
"foo1" == "foo1" #=> true
"foo1".equal? "foo1" #=> false
# シンボル
:foo1 == :foo1 #=> true
:foo1.equal? :foo1 #=> true
3 処理が少しだけ早くなる
シンボルは内部では整数として扱われるので、文字列に比べて処理が速くなる。
ハッシュって何?
ハッシュは両側を波カッコ{}で囲んで、キーと値の組をカンマで区切ることで指定できる。
ハッシュのキーとシンボルは重複を許さないので相性が良く利用されている。
a = {:foo1 => 1, :foo2 => 2, :foo3 => 3}
# 上も下も同じ
a = {foo1: 1, foo2: 2, foo3: 3} # =>の代わりに:で区切る
ハッシュのキーとしてシンボルを用いた形が{OO: OO}である。
シンボルをキーにして値をコロンで区切っている。
つまり {OO: :OO} はキーがシンボルで値もシンボルであるということがわかる。
例えば、
user = { name: "Michael", email: "michael@example.com" }
これはuserのハッシュの中に:nameと:emailをキーとして、Michaelという名前とmichael@example.comというemailアドレスを定義している。
また、
{ name: :apple }
これだと:nameをキーとしたハッシュであり、値が:appleとなっている。
ハッシュのキーも値も、シンボルである。
Rubyをこちらの教材で学びました