ぼっち演算子&.
「レシーバがnilのときに起こるエラーを回避するため」に.
の代わりに &.
を使います。
レシーバがnilでもエラーにならず、nilを返してくれます。
user = User.new
user.name # => "ユーザー名"
object = nil
object.name # => NoMethodError
object&.name # => nil
ぼっち演算子を使わない書き方
ぼっち演算子は、if文や三項演算子で書き換えることができます。
# ぼっち演算子
name = object&.name
# ifを使った書き換え
name = if object
object.name
else
nil
end
# 三項演算子を使った書き換え
name = object ? object.name : nil
@scivola さんからご指摘いただきました。(追記: 2022/03/14)
この書き換え方だと、たしかにobject
がnil
のときにはnil
を返してくれるのですが、object
がfalse
のときもnil
を返してしまいます。
つまり、false
によるエラー回避もしてしまっているわけです。
ぼっち演算子は「レシーバがnil
のときでもエラーを出さない」だけですので、false
に関しては挙動が変わらないはずです。
したがって、nil?
で条件分岐をさせた書き換えのほうが、ぼっち演算子を正確に書き換えていると言えます。
# ifを使った書き換え
name = if object.nil?
nil
else
object.name
end
# 三項演算子を使った書き換え
name = object.nil? ? nil : object.name
false
によるエラー回避が必要な場面では修正前のコードを使ったほうがよい場面もあるかもしれません。
修正前のコードでも問題ない場面が多いとは思いますが、コードを理解することは大切です。。。勉強になりました!