Исправление NilCheck на операторе безопасной навигации (&.)

Этот простой метод в классе просто запустить status метод с использованием оператора безопасной навигации.

def current_status
  account&.status
end

Но попробуйте сообщить об этом предупреждении:

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

Как я могу правильно написать такие методы, чтобы избежать Nil Check?

Я также проверил этот пост от thinkbot, но он кажется слишком большим для просто безопасного оператора навигации.

Ruby 2.3.1

1 ответ

Совет из "Примера 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 может быть просто отлично.

Что бы вы ни делали: вам нужно как можно больше тестировать свой код!

Хорошо , tell-dont-ask выглядит неплохо, но Example 4 кажется излишним, чтобы разрешить этот конкретный случай.

@andredurao Я думаю, мы можем использовать этот обходной путь для прохождения проверок по какой-то причине reek это нормально:

def current_status
  return unless account

  account.status
end
Другие вопросы по тегам