0
0

More than 3 years have passed since last update.

文字列リテラルはその都度オブジェクトが生成される

Posted at

文字列リテラルはその都度オブジェクトが生成される

colors = { 'apple' => 'red', 'banana' => 'yellow' }

colors.each do |key, value|
    puts value if key == 'banana'  
end  

=> yellow

のような処理を行いたい場合、'banana'オブジェクトが繰り返し処理が行われるたびに生成されてしまい、無駄である。

'banana'.object_id
=> 70183968739080
'banana'.object_id
=> 70183956909760
'banana'.object_id
=> 70183956844260

# 全て異なるオブジェクト

シンボルはオブジェクトがその都度生成されない。

:banana.object_id
=> 3021148
:banana.object_id
=> 3021148
:banana.object_id
=> 3021148

# 全て同じオブジェクト

そのため、ハッシュのキーをシンボルにすればオブジェクトが毎回生成されず、無駄をなくすことができる。

colors = { apple: :red, banana: :yellow }

colors.each do |key, value|
    puts value if key == :banana
end  

=> yellow
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0