Исправление 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