【結論】
・「&.(アンド ドット)」と「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」です。
「&.(アンド ドット)」について
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時間!」