【一人 Ruby Advent Calendar 2017】Ruby の &. 演算子【14日目】
一人 Ruby Advent Calendar 2017 15日目の記事になります。
今回は Ruby 2.3 で追加された &. 演算子(ぼっち演算子)について紹介します。
&. 演算子
&. 演算子はメソッド呼び出し(.)の代わりに使用できる演算子です。
obj&.hoge と呼び出した場合 obj が nil でない場合に hoge メソッドを呼び出します。
例えば、前回以下のようなコード例を書きましたが
# value が偽でなければ右辺を評価した値を返す value && value + 10 # キーが存在していれば右辺を評価した値を返す hash[key] && hash[key].hoge
上記のような && を利用したコードは &. を使用することで以下のように簡略化することができます。
# + をメソッドとして呼び出す value&.+ 10 hash[key]&.hoge
こんな感じで nil チェックをかなり短く書くことができます。
また、メソッドに渡す引数は『メソッドが呼び出された場合のみ』評価されます。
# value が nil の場合は bar は評価されない
value&.hoge bar
これだと無駄な呼び出しが抑えれられるので便利そうですね。
&. 演算子つらい問題
さて、次のようなコードを &. 演算子で置き換えたい場合にちょっとつらい問題が発生します。
hash && hash[key]
hash&.[key]
と書きたいんですが残念ながらこれはエラーになります。
上記でも書いたんですが演算子を &. 演算子で呼び出したい場合はメソッド呼び出しのように記述する必要があります。
hash&.[] key
これはちょっとつらいですね…。
ちなみに Hash であれば #dig を使ったほうが見やすいかもしれません。
hash&.dig key
まとめ
たまにつらいこともあるんですが、だいたいは便利。