Rubyアスタリスク2つ(**)でハッシュ値展開で綺麗なコードを書く

Rubyのアスタリスク2つ(**)でハッシュ値の展開ができる便利な方法をご紹介いたします。

以下のように** でハッシュ値を展開していきます。

base_param = {base1: 'base1', base2: 'base2', base3: 'base3'}

tmp_param1 = {test1: 'test1', **base_param}
puts tmp_param1
# => {:test1=>"test1", :base1=>"base1", :base2=>"base2", :base3=>"base3"}

tmp_param2 = {test2: 'test2', **base_param}
puts tmp_param2
# => {:test2=>"test2", :base1=>"base1", :base2=>"base2", :base3=>"base3"}

ベース値などがある場合はこのようにして展開すると綺麗に実装ができそうですね。

上記コードをもう少し簡略化すると以下のように書くのがいいと思います。

base_param = {base1: 'base1', base2: 'base2', base3: 'base3'}

tmp_params = [
    {test1: 'test1'},
    {test2: 'test2'},
]

tmp_params.each do |tmp_param|
    puts tmp_param.merge(**base_param)
end
# => {:test1=>"test1", :base1=>"base1", :base2=>"base2", :base3=>"base3"}
# => {:test2=>"test2", :base1=>"base1", :base2=>"base2", :base3=>"base3"}

このように書くと、変動値とベースの基本値との組み合わせと言うような感じで使うことができますね(*^^*)

簡潔にメンテしやすいコードが書けると思うので覚えておきたい方法です。

 

何か参考になれば幸いです(*^^*)