2016-11-30 101 views
1

我遇到以下问题。我需要验证日期和时间,所以如果星期几是星期二星期四并且时间在下午2:00到3:00之间,它将返回false。嵌套if语句与复杂逻辑条件

我有两个选择:

if (appointmentRequest.getDateTime().getDayOfWeek() == DayOfWeek.TUESDAY 
       || appointmentRequest.getDateTime().getDayOfWeek() == DayOfWeek.THURSDAY) { 
      if (appointmentRequest.getDateTime().getHour() == 2) { 
       return false; 
      } 
     } 

选项2:

if ((appointmentRequest.getDateTime().getDayOfWeek() == DayOfWeek.TUESDAY 
       || appointmentRequest.getDateTime().getDayOfWeek() == DayOfWeek.THURSDAY) 
       && (appointmentRequest.getDateTime().getHour() == 2)) { 
      return false; 
     } 

什么是在这样的情况下,最好的做法呢?

+0

有没有明确的答案。这更多的是风格问题。我发现第一个更具可读性。 – m0skit0

回答

5

逻辑上它们是等效的,计算上在运行时间上的差异可以忽略不计。

总是力争清晰度和那将是更具扩展性和更容易维护。作为一个经验法则,请记住,尽管您通常会编写一行代码,但您可以调试数百次。

我的直觉是,第一个选择适合。如果您选择了第二个if,则很容易设置换行符。

+2

Aggree,但我会创建一个像verifyDayOfWeek(appointmentRequest.getDateTime())和Hour类似的方法。这样你可以有这样的事情:if(!verifyDayOfWeek()&&!verifyHour()) – pringi

+0

我的经验法则是代码是供人阅读的。 – m0skit0

+0

@ m0skit0:这是很好的。如果你在这个前提下提交答案,我一定会赞成它。 – Bathsheba

2

我觉得你的问题有点虚假,清晰度可以用其他方式通过提取公共部分为变量和依托的组合来赢得,例如在EnumSet

LocalDateTime dt = appointmentRequest.getDateTime(); 
if (EnumSet.of(TUESDAY, THURSDAY).contains(dt.getDayOfWeek()) && dt.getHour() == 2) { 
    return false; 
}