シンボルとは何か?
シンボルを表すクラス。シンボルは任意の文字列と一対一に対応するオブジェクトです。
文字列の代わりに用いることもできますが、必ずしも文字列と同じ振る舞いをするわけではありません。同じ内容のシンボルはかならず同一のオブジェクトです。
シンボルオブジェクトは以下のようなリテラルで得られます。
引用:公式ドキュメント
https://docs.ruby-lang.org/ja/2.6.0/class/Symbol.html
###シンボルと文字列の違い
シンボルと文字列の違いについて説明します。
シンボルは、Symbolクラスのオブジェクトで、文字列はStringクラスのオブジェクトになります。
:apple.class #=> Symbol
"apple".class #=> String
シンボルはRubyの内部で整数として管理されます。そのため、文字列よりも高速に処理を実行出来ます。
また、『同じシンボルであれば同じオブジェクトである』という特徴を持ちます。このため、大量の同じシンボルと文字列を作成した場合、シンボルの方がメモリの使用効率が良くなります。
:apple.object_id #=> 1143388
:apple.object_id #=> 1143388
:apple.object_id #=> 1143388
"apple".object_id #=> 0223819213380
"apple".object_id #=> 0223819213120
"apple".object_id #=> 0223819277810
また、文字列のように破壊的な変更は出来ないという特徴を持ちます。
###シンボルの特徴と主な用途
####◎特徴
・内部的には整数なので、高速に処理することが出来る。
・同じシンボルは同じオブジェクトであるため、メモリの効率が良い。
・イミュータブルなオブジェクトなので、勝手に値が変えられる心配がない。
※イミュータブルオブジェクト・・・作成後にその状態を変えることのできないオブジェクトのことである。対義語はミュータブル (英: mutable) なオブジェクトで、作成後も状態を変えることができる。
####◎用途
・ハッシュのキー { :key => "value" }
・アクセサの引数で渡すインスタンス変数名 attr_reader :name
・メソッド引数で渡すメソッド名 send :to_s
・C の enum 的な使用 (値そのものは無視してよい場合
###参考文献
プロを目指す人のためのRuby入門・・・伊藤淳一[著]