Hashだったらキーの値、nilだったらnilがほしいとき

  • 1
    Like
  • 0
    Comment

Hashインスタンスかnilか分からない変数があって、Hashインスタンスだったらキーに紐づく値がほしい、nilだったらnilのままでいい、そんなコードが書きたくなることがある。

単純に書くと下記のようになるが、変数名を2度書くのが面倒だ。

a = {foo: 1}
b = a ? a[:foo] : nil
b = a && a[:foo]

Ruby 2.3.0以降なら「ぼっち演算子(safe navigation operator)」が使える。

b = a&.[](:foo)

NilClass#to_h で {} が返るので、下記のようにする手もある。

b = a.to_h[:foo]