【Ruby】ハッシュのシンボルについて解説【初心者向け】

本記事はこんな方向けです。

  • ハッシュの書き方がいまいち分からない人
  • シンボルって何?となる人
  • シンボルをわざわざ使う理由が分からない人

Rubyのハッシュを勉強していると、『シンボル』という言葉で出会います。
本記事では、シンボルが何なのか詳しく解説していきます。

まずはハッシュの基本型を理解しよう

ハッシュは下記のように『キー』と『バリュー』の2つの要素で構成されます。
キーは矢印の前、バリューは矢印の後を指します。

pikachu = {
	'name' => 'ピカチュウ',
	'hp' => 30,
	'offense' => 50,
	'defense' => 20
}

キーを使って、対応するバリューを取り出すことができます。

puts pikachu['name']
#ピカチュウ

上記のようにキーを文字列にしても問題ないのですが、多くの場合『シンボル(:)』で書かれる場合が多いです。

ハッシュのキーをシンボルで書きなおす

先程のコードをシンボルを使って書き直します。

pikachu = {
	:name => 'ピカチュウ',
	:hp => 30,
	:offense => 50,
	:defense => 20
}

前の章と同じく、キーに対応するバリューを取り出します。

puts pikachu[:name]
//ピカチュウ

キーを文字列で書いた時と同じ結果となりました。

シンボルは文字列ではなく、整数である

ハッシュを書く際に、キーに文字列ではなく『シンボル』が使われる理由として、シンボルの中身が『整数』であることが挙げられます。

シンボルは中身が『整数』であり、文字列に比べて処理速度が速い!

ちなみにシンボルが文字列と異なることは、「class」メソッドを使えば確認できます。

'name'.class #=>String
:name.class #=>Symbol

シンボルを使わずに簡潔にハッシュを書く

下記のようにハッシュを表現しても、問題ないのですが、矢印を書くのがめっちゃメンドイじゃないですか〜

pikachu = {
	:name => 'ピカチュウ',
	:hp => 30,
	:offense => 50,
	:defense => 20
}

シンボルがキーになる場合は、下記のように書き直せちゃいます。

pikachu = {
	name:'ピカチュウ',
	hp:30,
	offense:50,
	defense:20
}

ちなみに下記のようにコードを書いて、バリューを取り出すことはできません。

pikachu = {
	name:'ピカチュウ',
	hp:30,
	offense:50,
	defense:20
}

p pikachu['name'] #=>nil

キーに文字列を指定しているのに、取り出す際はシンボルを使うと値が『nil』となってしまいます。

文字列とシンボルは別物!!バリューを取り出す際は注意しよう。

ハッシュの中にハッシュを入れることも可能

ハッシュの中にハッシュが存在するケースもあります。
ただバリューを取り出す方法は先程と同じです。

pikachu = {
  name: 'ピカチュウ',
  hp: 30,
  offense: 50,
  defense: 20,
  foods: { like_food: 'りんご', dislike_food: 'ばなな' }
}
p pikachu[:name] #=>ピカチュウ
p pikachu[:foods][:like_food] #=>りんご
p pikachu[:foods][:dislike_food] #=>ばなな