ボッチ演算
&.
はtry
の省略形と考えて頂いてOKです。
tryはNilClassのメソッド
レシーバがnilクラスの時に動く
レシーバは簡単にいうと.
の左側のことをレシーバっていいます。
foo.
bar
レシーバ.
メソッド
fooがレシーバ barがメソッド
使い方
普通のボッチ演算子の使い方
使用前
p nil.hogeee
undefined method `hogeee' for nil:NilClass (NoMethodError)
使用後
p nil&.hogeee
nil
arrayとかhashで使うとき
使用前
arraydesu = nil
p arraydesu[100]
undefined method `[]' for nil:NilClass (NoMethodError)
使用後
arraydesu = nil
p arraydesu&.[](100)
nil
hashの時も使い方はarrayとほぼ同じです
hashdesu = nil
p hashdesu&.[](:are)
nil
どういう時利用するか
レシーバが存在したりしなかったりするパターンの場合に利用することが多いです
使用例
今回の下記の例でいくと
文字の数を返すsize
メソッドを
レシーバに nilだった場合は固定で 99999999を返すという処理をしています。
aruka_naika_wakaranai = nil
koredekettei = aruka_naika_wakaranai&.size || 99999999
p koredekettei
99999999
aruka_naika_wakaranai = 'mozidayo'
koredekettei = aruka_naika_wakaranai&.size || 99999999
p koredekettei
8
ボッチ演算子の説明中にまた||
というのがでてきたのですが
||
は左側がnilとかfalseなら右側を使うよってやつです。
まとめ
レシーバに値がないと
undefined method ‘hogeee‘ for nil:NilClass (NoMethodError)
となるところをボッチ演算子を使うことでnilを返してあげる状態にできます。
注意として本来ならば
undefined method ~で値が存在しないと検知する動きを
nilを返すようにすることで バグに気づけない等問題も発生する可能性があるので
使いどころは考えるのが吉だと思います