我正在用这一行回顾一些Java代码

if ( list.size() == 1 || list.size() <= 4) {...}


我评论说,我认为这样做与之前没有什么不同

if (list.size() <= 4) {...}


他说这很重要,需要首先。我不明白也许如果是这样的话

if (list.size() == 1 || list.size() <= someVeryCostlyFunction() ) {...}


并且如果someVeryCostlyFunction()总是返回一些大于等于1的正数,则通常大多数情况下两者都可能是1。我们应该检查效率。

最佳答案

具有以下两个条件的代码smells

if (list.size() == 1 || list.size() <= 4)


也许作者想到了这一点:


如果列表中元素的数量等于或小于4。


即使列表中有零个元素,当前代码也可以满足条件,这很可能是错误的。

此条件的另一个问题是使用magic number 4?
它有什么重要意义?为什么不是5
它应该自我记录,并与代码中可能出现的其他4个区别:

int MAX_HANDLED = 4;
if ( list.size() > 0 && list.size() <= MAX_HANDLED )
:
:
int ALL_TIRES = 4;
if (car.getTires() < ALL_TIRES) {
  car.stop();
}


至于性能,我看不出有什么明显的理由可以使现有条件比您提出的条件要快(即使list.size > 1时,第二个条件也要快)。参见与此相似的question

09-30 14:26
查看更多