rubyの基礎(6)シンボル

rubyにはシンボルという概念があります。変数のように使いますが、先頭にコロン(:)をつけて書くとシンボルというオブジェクトです。

irb> :s.class
=> Symbol

例えば文字列 "foo" とシンボル :foo は別物のオブジェクトです。
"foo" は mutable(可変)なString オブジェクト
:foo は immutable(不変)なSymbol オブジェクト
これを混同すると、Hashでの値の取得で間違えることになります。

# 文字列でキーを定義 
irb> hash = {'key' => 'value'} 
=> {"key" => "value"}
# 文字列"key"で値を取得
irb> hash['key']
=> "value"
# シンボルでは値を取得できない(:keyというキーは存在しないから)
irb> hash[:key]
=> nil
# シンボルでキーを作ってみると、 
irb> hash = {:key=>"value"}
=> {:key=>"value"}
irb> hash[:key]
=> "value"

文字列とシンボルはそれぞれ to_sym, to_s メソッドで相互に変換可能です。


irb> "foo".to_sym 
=> :foo
irb> :foo.to_s 
=> "foo"

シンボルは言わば文字列の皮を被った数値と言えます。シンボルでのアクセスはruby内部の処理系に直接アクセスできるため速度が速いです。
rubyはメソッドや変数は内部的にシンボルで管理しているのです。

ちなみにハッシュは、

irb> {'a':1}
=> {:a=>1}
irb> {a:1}
=> {:a=>1}

文字: 値 と書くと、 シンボル(キー)=> 値 に解釈されます。

この記事が気に入ったらサポートをしてみませんか?