在条件中嵌套if语句与复杂逻辑

时间:2016-11-30 11:40:59

标签: java nested-if

我有以下问题。我需要验证日期和时间,因此如果星期几星期二星期四并且时间在2:00到3:00 PM之间,则返回false。

我有两个选择:

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;
        }

在这种情况下,最佳做法是什么?

2 个答案:

答案 0 :(得分:5)

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

始终追求清晰度以及更易于扩展且维护更简单的。根据经验,请记住,虽然您通常只编写一行代码,但您将调试数百次。

我的直觉是第一个选项适合那个。如果您做出选择,在第二个if上设置换行符很容易。

答案 1 :(得分:2)

我发现你的问题有点像错误的二分法;清晰度可以通过其他方式获得,例如通过将公共子表达式提取到变量并依赖EnumSet的组合:

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