Techioz Blog

方法を試すより良い代替手段

概要

きれいなコードが欲しいのですが、これでは不格好に感じると思います。

これを行うより良い方法はありますか?

User.try(:profile).try(:settings).try(:card).try(:options)

try メソッドを削除すると、nil メソッド エラーが発生します。

次のようなことを行う別のコードがありますか:

User.try(:profile,:settings, :card, :options)

解決策

Ruby 2.3.0 からは & が使えるようになりました。 try の代わりにメソッドを使用します。

User&.profile&.settings&.card&.options

しかし、このようなことは避けるべきです。

nil を返す可能性のあるオブジェクトにメッセージを送信する場合、またはオブジェクトがそのメッセージに応答しない場合、それは独自に解決する必要がある問題です。 try を使用しても、nil チェックと同様に、問題が悪化するだけです。一貫して動作する一貫したインターフェイスを作成します。