本記事はこんな方向けです。
- ハッシュの書き方がいまいち分からない人
- シンボルって何?となる人
- シンボルをわざわざ使う理由が分からない人
Rubyのハッシュを勉強していると、『シンボル』という言葉で出会います。
本記事では、シンボルが何なのか詳しく解説していきます。
Contents
ハッシュは下記のように『キー』と『バリュー』の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] #=>ばなな