Good day departure IT memorandum / いい日旅立ち IT備忘録

I'm learning Java, Python and so on in vocational school, Kyoto, Japan. I wil update the various information about programming here. / 現在、関西の某専門学校に通っている学生によるプログラミングの備忘録です。Java、Python、Rubyなど色々書いていきたいと考えています。

Rubyのぼっち演算子

オブジェクトがnilの場合、メソッドを実行しようとするとエラーになってしまい、プログラミングの処理が停止してしまう。&.演算子(ぼっち演算子)を使用することで、エラーを制御することが出来る。

Rubyにおいてはレシーバーであるオブジェクトに対してあるメソッドを実行する時、そのオブジェクトがnilの場合はエラーになる。

ところがぼっち演算子はオブジェクトがnilの場合、nilを返すことでエラーを出さなくする。オブジェクトがnilでなければそのまま結果を返し、nilの場合はnilを返すメソッドがこの演算子の特徴である。これによりオブジェクトの有無に応じてif文を書いたり、三項演算子を使う必要がなくなる。

> object = nil
> object&.name
=> nil

> object.name
=> Traceback (most recent call last):
        1: from (irb):35
NoMethodError (undefined method `name' for nil:NilClass)

上はぼっち演算子を使っているので、nilを返している。処理が停止することなく、nilを返すところまで動いているのである。

ぼっち演算子を使うと以下のように簡単に分岐をかける。下の三つはいずれも同じ結果である。

name = if object
 obejct.name
else
 nil
end

name = object ? object.name : nil

name = object&.name