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

Dra*_*orn 3 scala intellij-idea

if (cubeNames.size > 0) {
  //Do something
}
Run Code Online (Sandbox Code Playgroud)

Intellij建议将其替换为:

if (cubeNames.nonEmpty) {
  //Do something
}
Run Code Online (Sandbox Code Playgroud)

现在函数nonEmpty定义为:

 def nonEmpty: Boolean = !isEmpty
Run Code Online (Sandbox Code Playgroud)

哪个叫另一个功能!

这一切真的是必要的,实用性,高效吗?

Mar*_*rth 8

.size需要通过整个集合来确定它的大小,而.isEmpty只需要找到一个要返回的元素false.

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

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

  • @Dragonborn不,`List`特别没有,因为它们几乎在所有地方使用,并且很少需要大小.请注意,由于它是一个递归类型,列表的尾部也会存储它的大小,以及尾部的尾部,等等.据我所知,这种权衡取决于所有共享这个列表概念的语言:Lisps,MLs,Erlang,Haskell,Scala等. (2认同)