2
0

More than 1 year has passed since last update.

ruby ぼっち演算子について try try! &. &[] あと||も

Posted at

ボッチ演算

&.tryの省略形と考えて頂いてOKです。
tryはNilClassのメソッド
レシーバがnilクラスの時に動く

レシーバは簡単にいうと.の左側のことをレシーバっていいます。
foo.bar
レシーバ.メソッド
fooがレシーバ barがメソッド

参考 github_ruby_NilClass

使い方

普通のボッチ演算子の使い方

使用前

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を返すようにすることで バグに気づけない等問題も発生する可能性があるので
使いどころは考えるのが吉だと思います

2
0
1

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
2
0