【问题标题】:I don't understand the difference我不明白区别
【发布时间】:2017-03-23 17:30:30
【问题描述】:

我正在用这一行检查一些 Java 代码

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

我评论说我看不出这与做有什么不同

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

他说这很重要,需要成为第一个。我不明白。也许如果它是类似的东西

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

如果 someVeryCostlyFunction() 总是返回某个正数 >= 1,那么在大多数情况下,大小预计为 1。否则我看不出区别。我们应该检查效率。

【问题讨论】:

  • "it matters and needs to be the first" - 这听起来不像是一个令人信服的答案。对于那些无法解释他们为什么采取这些行动的人的行为,我不会给予太多评价。
  • 那么你必须为初学者计算一次list.size() ...
  • “需要成为第一个”我的意思是第一个有两个条件的例子,而不是第二个只有一个条件的例子
  • @Tony 在我看来,开发人员只是不想承认犯了一个愚蠢的错误。但我现在很想知道代码是如何证明的。
  • @Tony 是的,知道结果是什么会很有趣

标签: java performance processing-efficiency


【解决方案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 &gt; 1 时也会更快),我看不出有任何重要原因。请参阅此 question 类似问题。

【讨论】:

  • 我现在看到他想要在大小 > 4 时收到警报,但你仍然不需要 == 1。而且你确实需要 >0 虽然我猜你会收到断言错误大小 == 0:WebElement ele = lists.get(0)。会给出一个断言(或者 size = 0 ind = 0 什么的)
  • 如果已经有一个空列表的断言,那么你不需要先检查。所以你提出的检查应该足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-23
  • 1970-01-01
  • 1970-01-01
  • 2015-02-10
  • 2021-05-13
相关资源
最近更新 更多