Scala Intellij建议用非空替换尺寸检查,但为什么呢?

时间:2015-08-13 05:12:38

标签: scala intellij-idea

if (cubeNames.size > 0) {
  //Do something
}

Intellij建议将其替换为:

if (cubeNames.nonEmpty) {
  //Do something
}

现在函数nonEmpty被定义为:

 def nonEmpty: Boolean = !isEmpty

这是对另一个函数的调用!

这一切真的有必要且实用,有效吗?

2 个答案:

答案 0 :(得分:8)

.size需要浏览整个集合以确定其大小,而.isEmpty只需找到一个元素即可返回false

对于小型收藏品来说,这可能不会太重要(但你仍然应该这样做)。但是,对于大量的收藏品,会有很大的不同。

更糟糕的是,如果集合是无限的(例如val s:Stream[Int] = 0 #:: s),那么.size将永远不会终止,而.isEmpty将会终止。

答案 1 :(得分:1)

我认为read codeevaluate code容易得多。这就是为什么代码list.nonEmpty可能只有一个与list.size > 0不同的含义。