ハッシュの書き方
Rubyのハッシュの書き方が3つ程あるのは最初に習うと思います。
なんで3つあるの?そもそもシンボルって?となったので文字列とシンボルの違いを見ていきます。そして自分は調べてシンボルで書く事に納得しました。
country = { 'japan' => 'Tokyo', 'usa' => 'washington'}
country = { :japan => 'Tokyo', :usa => 'washington'}
country = { japan: 'Tokyo', usa: 'washington'}
シンボルと文字列の特徴の違い
大きく分けて3つの違いがあります。
1,クラス
2,内部処理
3,オブジェクトID
4,ミュータブルかイミュターブル
クラス
'example'.class
=> String
:example.class
=> Symbol
内部処理
Rubyでは文字列は文字列として扱われます。ですが、シンボルは整数として管理されます。表面上文字列に見えますが、整数の為文字列より高速に処理されます。
オブジェクトID
同じオブジェクトを複数作ります。文字列はそれぞれ別のオブジェクトとして生成されますがシンボルは同じシンボルであれば同じオブジェクトとして扱われます。その為メモリの使用効率がシンボルの方が良くなります。
'example'.object_id => 70235159966100
'example'.object_id => 70332409696280
'example'.object_id => 70332409696200
:example.object_id => 1058268
:example.object_id => 1058268
:example.object_id => 1058268
ミュータブルかイミュターブル
ミュータブルとは変更可能という意味でミュータブルなオブジェクトは破壊的な変更ができると言う事
イミュータブルは変更出来ない事です。
文字列はミュータブルでシンボルはイミュターブルです。その為シンボルは破壊的な変更がされないように出来るということになります。
まとめ
シンボルのメリットとして
・整数として扱われるので文字列より処理が速い
・同じシンボルは同じとして扱われるのでメモリ効率が良い
・イミュターブルな為破壊的な変更が出来ない