似てるようで違うシンボルと文字列の違いとは
シンボルと文字列の書き方は以下の通りの違いがあります。
:symbol.class # => symbol 'string'.class # => string
シンボルは整数として管理されるため、文字列より速く処理が可能になります。
例は以下の通りです。
#文字列よりシンボルのほうが処理が速い 'pen' == 'pen' :pen == :pen
メモリの使用効率の違い
シンボルと文字列ではメモリの使用効率の違いがあります。
シンボルの場合は再定義をしても同じメモリを使用しますが
文字列の場合は、再度違うメモリが配置されます。
例としては以下のとおりです。
puts :symbol.object_id # => 811228 puts :symbol.object_id # => 811228 puts :symbol.object_id # => 811228 puts 'string'.object_id # => 70252239918060 puts 'string'.object_id # => 70252239917800 puts 'string'.object_id # => 70252239917620
また、以下のような破壊的変更をするとシンボルの場合はエラーとなります
string = 'pen' string.upcase! puts string # => PEN symbol = :apple puts symbol.upcase # => APPLE puts symbol.upcase! # => ERROR undefined method `upcase!'
詳細は以下にも記載しています。
シンボルを利用する大きなメリット
- 数値扱いとなり高速な処理ができる
- メモリの使用効率がいい
- イミュータブルなので、間違って値を変えられる心配がない
などあります。
Webサイト開発などでは処理速度が重要になってきます。
意識して使うようになるといいですね!(*^^*)
何かの参考になれば幸いです。