4

クラスのこの単純なメソッドはstatus、安全なナビゲーション演算子を使用してメソッドを実行するだけです。

def current_status
  account&.status
end

しかし、reek は次の警告を報告します。

MyClass#current_status performs a nil-check [https://github.com/troessner/reek/blob/master/docs/Nil-Check.md]

Nil Check を回避するために、このようなメソッドを適切に記述するにはどうすればよいですか?

思考ボットからのこの投稿も確認しましたが、安全なナビゲーション オペレーターには「多すぎる」ように思えます。

ルビー 2.3.1

4

2 に答える 2

2

リンクされた投稿の「例4」からのアドバイスは冗長ですが、かなり良いです:

class MyClass
  def initialize(with_account = nil)
    @account = Account.new if with_account
  end

  def current_status
    account.status
  end

  def account
    @account || NilAccount.new
  end
end

class Account
  def status
    "Up!"
  end
end

class NilAccount
  def status
    "Down!"
  end
end

puts MyClass.new(:with_account).current_status
#=> "Up!"
puts MyClass.new.current_status
#=> "Down!"

それがあなたにとって「多すぎる」場合は、account&.status大丈夫かもしれません。

何をするにしても、できる限りコードをテストする必要があります!

于 2017-01-12T11:16:43.350 に答える