在ruby中重构这些代码的最佳方法是什么?
def check(message_type)
if (message_type == 'reminder' and self.copy_reminder == true) or
(message_type == 'rrm' and self.is_rrm == true and self.copy_rrm == true) or
(message_type == 'alert' and self.is_rrm == true and self.copy_alert == true) or
(message_type == 'reply' and self.is_rrm == true and self.copy_user_response == true)
call_some_method
end
答案 0 :(得分:3)
请勿在布尔条件下使用and
或or
,请使用&&
和||
。 and
和or
用于控制流程。阅读属性时不要使用self.
,您根本不需要它。不要检查这样的布尔值some_thing == true
,some_thing
是否足够。
我更喜欢将复杂的条件转移到私有方法中。这使得实际的方法更具可读性。
def check(message_type)
call_some_method if valid_message_type?(message_type)
end
private
def valid_message_type?(message_type)
case message_type
when 'reminder' then copy_reminder
when 'rrm' then is_rrm && copy_rrm
when 'alert' then is_rrm && copy_alert
when 'reply' then is_rrm && copy_user_response
end
end