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をこちらの教材で学びました