重构具有多个'and'和'or'语句的if语句

桑吉

在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
斯派克曼

请勿使用andor在布尔条件下使用&&||andor用于控制流。self.读取属性时不要使用,只是不需要它。不要查布尔这样some_thing == truesome_thingtrueish足够了。

而且我更喜欢将复杂的条件转移到私有方法中。这样可以使实际的方法更具可读性。

  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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章