LoginSignup
0
0

More than 1 year has passed since last update.

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

Last updated at Posted at 2022-04-22

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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0