「&.(アンド ドット)」と「try」の違い

f:id:ryoutaku_jo:20190420220421p:plain

【結論】

・「&.(アンド ドット)」と「try」は
 どちらもレシーバーがnilの時に、
 「NoMethodError」ではなく、
 「nil」を返してくれる機能

・「&.(アンド ドット)」は、そもそもメソッドが
 定義されていない場合には、エラーを返す。

・「try」は、メソッドが定義されていない場合でも、
 エラーにはならずnilを返す。

【目次】

【本題】

nilClassによるNoMethodErrorを防ぐ手段

"1 2 3".split
=> ["1", "2", "3"]

nil.split
=> NoMethodError (undefined method `split' for nil:NilClass)

上記の様に、NilClassに定義されていないメソッドを
nilに対して使用した場合、NoMethodErrorのエラーが返ります。

しかしそういったエラーを出したく無いケースも存在します。
そういった場合に利用できるのが、
「&.(アンド ドット)」と「try」です。

「&.(アンド ドット)」について

「&.(アンド ドット)」は、ruby演算子です。

nil&.split
=> nil

「try」について

ActiveSupportで提供されているメソッドです。

nil.try(:split)
=> nil

それぞれの違い

それぞれの違いは、メソッドが呼び出し可能かを判断して処理を返す点です。

「try」はメソッドが呼び出し可能かまで判定するので、
メソッドが定義されていない場合でも、 エラーにはならずnilを返す。

「&.(アンド ドット)」は、レシーバがnilかの判定しかしないので、
メソッドが定義されていない場合には、エラーを返します。

nil.try(:undefined)
=> nil

nil&.undefined
=> NoMethodError: undefined method

《今日の学習進捗(3年以内に10000時間に向けて)》

学習開始からの期間 :134日
今日までの合計時間:1291h
一日あたりの平均学習時間:9.7h
今日までに到達すべき目標時間:1224h
目標との解離:67h
「10,000時間」まで、

残り・・・「8709時間!」