Rubocop жалуется: Style / GuardClause: используйте предложение guard вместо того, чтобы заключать код в условное выражение.Если Issue_Flag == true && Issue_Notification_sent &&! Issue_Notification_follow_up_sent && send_follow_up ^^
Мой исходный код
if issue_flag == true && issue_notification_sent && !issue_notification_follow_up_sent && send_follow_up
email_address = "sales@test.com"
puts "Emailing Follow Up #{email_address} - #{sales_order}"
UserMailer.issue_notification(self, email_address).deliver_now
update(issue_notification_follow_up_sent: true)
end
и из чтения документов , кажется, что я могурешить эту проблему, реализовав вместо этого следующий код:
return unless issue_flag == true && issue_notification_sent && !issue_notification_follow_up_sent && send_follow_up
email_address = "sales@test.com"
puts "Emailing Follow Up #{email_address} - #{sales_order}"
UserMailer.issue_notification(self, email_address).deliver_now
update(issue_notification_follow_up_sent: true)
Я вижу, что это существенно нарушает метод раньше, если не выполняется условие, но мне это кажется менее читабельным.Это также кажется менее поддерживаемым, так как дополнительные условия не могут быть добавлены после этого кода, если они не передают условие в первой строке, например, для выполнения чего-то другого, если issue_flag == true && !issue_notification_sent
(все, что соответствует этому условию, уже вернулось бы в строке 1 рефакторированногокод выше).
Есть ли лучший способ реорганизовать это, чтобы можно было добавить больше условий после кода ниже, без преждевременного возврата кода?
Спасибо.