Rubyのお作法(シンボル)

シンボル

変数名のはじめに:(コロン)がつくと、それはシンボル。
「文字列と1体1に対応づく変数」らしい。

例えば、

obj1 = 'Object'
obj2 = 'Object'

とした場合、2つの異なるオブジェクトがRuby空間に生成される

obj1.object_id # => 179960
obj2.object_id # => 179950

一方、これらのシンボルは以下により得られる

obj1.intern # => :Object
obj2.intern # => :Ooject

異なるオブジェクトのシンボルは異なるオブジェクトであることが期待される。
しかしそうはならない

obj1.intern.object_id # => 29098
obj2.intern.object_id # => 29098

つまり同一記号のシンボルは同じオブジェクトである
これはつまり一つのRuby空間には無数の"Object"(文字列)が存在しうるけれども
これに対応する:Objectというシンボルオブジェクトはただ一つしか存在しない
ということを意味している

シンボルの出番
  :
ハッシュで管理されるオブジェクトへのアクセスはそのキー値を使って行う。

シンボルの特性をまとめてみよう

1. 文字列と一対一に対応した記号である(文字列オブジェクトとシンボルオブジェクトは多対一の関係になる)
2. 同一記号のシンボルはRuby空間に唯一つ存在する(整数と同様、文字列と相違)
3. シンボル記号自体が意味付けを表象できる(文字列と同様、整数と相違)

これらの特性を考えればそのオブジェクトの変更が予定されない場合
無駄なオブジェクトが生成されないシンボルは速度の点で文字列オブジェクト
よりも有利でありまたその記号の可読性を高めたい場合整数オブジェクトより
も有利である


参考:http://d.hatena.ne.jp/keyesberry/20080802/p1


ということは、Hashなどで、keyを一意に定める場合などに利用するのがいいそう。勉強になった。