1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Ruby】ぼっち演算子とその書き換え方

Last updated at Posted at 2022-03-12

ぼっち演算子&.

「レシーバが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)

この書き換え方だと、たしかにobjectnilのときにはnilを返してくれるのですが、objectfalseのときもnilを返してしまいます。
つまり、falseによるエラー回避もしてしまっているわけです。

ぼっち演算子は「レシーバがnilのときでもエラーを出さない」だけですので、falseに関しては挙動が変わらないはずです。

したがって、nil?で条件分岐をさせた書き換えのほうが、ぼっち演算子を正確に書き換えていると言えます。

# ifを使った書き換え
name = if object.nil?
 	nil
else
  	object.name
end

# 三項演算子を使った書き換え
name = object.nil? ? nil : object.name

falseによるエラー回避が必要な場面では修正前のコードを使ったほうがよい場面もあるかもしれません。
修正前のコードでも問題ない場面が多いとは思いますが、コードを理解することは大切です。。。勉強になりました!

1
0
2

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?