0
Help us understand the problem. What are the problem?

posted at

updated at

Railsの {OO: :OO} これ何⁇ {OO: OO} とどう違う? 【シンボル、ハッシュ】

Railsによく出てくるシンボル、ハッシュについて

結論

{OO: OO}は、ハッシュのキーとしてシンボルを用いた形である。
そして、
{OO: :OO} は、キーがシンボルで値もシンボルであるハッシュのことを指している。
これについて以下で詳しく調べてみる。

シンボルって何?

文字列の先頭に:(コロン)がついているオブジェクトのことを指す。
Stringオブジェクトが文字列を表すのに対して、Symbolオブジェクトは名前を表すものと理解しておく。

1 シンボルは書き換えられない

文字列は書き換えることができるが、シンボルは変更不可である。

2 同じobject_idが割り当てられる

シンボルは同じobject_idが割り当てられるので、以下の通り2つのオブジェクトは同一である。しかし、文字列は2つのオブジェクトは等しいが同一ではない。

ruby
 # 文字列
"foo1" == "foo1"      #=> true
"foo1".equal? "foo1"  #=> false

 # シンボル
:foo1 == :foo1        #=> true
:foo1.equal? :foo1    #=> true
3 処理が少しだけ早くなる

シンボルは内部では整数として扱われるので、文字列に比べて処理が速くなる。

ハッシュって何?

ハッシュは両側を波カッコ{}で囲んで、キーと値の組をカンマで区切ることで指定できる。
ハッシュのキーとシンボルは重複を許さないので相性が良く利用されている。

ruby
a = {:foo1 => 1, :foo2 => 2, :foo3 => 3}
 # 上も下も同じ
a = {foo1: 1, foo2: 2, foo3: 3}  # =>の代わりに:で区切る

ハッシュのキーとしてシンボルを用いた形が{OO: OO}である。
シンボルをキーにして値をコロンで区切っている。
つまり {OO: :OO} はキーがシンボルで値もシンボルであるということがわかる。
例えば、

ruby
user = { name: "Michael", email: "michael@example.com" }

これはuserのハッシュの中に:name:emailをキーとして、Michaelという名前とmichael@example.comというemailアドレスを定義している。
また、

ruby
{ name: :apple }

これだと:nameをキーとしたハッシュであり、値が:appleとなっている。
ハッシュのキーも値も、シンボルである。

Rubyをこちらの教材で学びました

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
0
Help us understand the problem. What are the problem?