個人メモです。
&.
の役割について。通常のオブジェクト(レシーバ)に対しメソッドを実行する処理の、ドットの前に&
をつける。
##構文と役割
・レシーバ&.メソッド
レシーバがnilの場合に、エラーではなくnilを返す。
##実例
通常の処理(エラー)
x = nil
x.length
=> NoMethodError (undefined method `length' for nil:NilClass)
&.メソッド
x = nil
x&.length
=> nil
エラーにならず、nilを返すことができる。
##デフォルトの値をもつ処理
文字列に変換するto_s
メソッドや、数値に変換するto_i
メソッドはレシーバがない場合エラーではなくデフォルトの値になる。
ただし、&.
を使うとレシーバがnil
のときはnil
を返す。
通常
x = nil
x.to_s
=> ""
x.to_i
=> 0
&.
x = nil
x&.to_s
=> nil
x&.to_i
=> nil
##実用
実用ベースでは、レシーバがnilになる可能性がある場合は、エラー表示ではなくnilを返し、その場合は||
でデフォルトで設定した値を返す。
実例1
x =nil
x&.lenght || 0
=> 0
実例1
x =nil
x&.lenght || "nilです"
=> "nilです"
シンプルに例外処理っぽく書ける。