为什么常规for循环优于forEach?

时间:2018-07-14 16:44:17

标签: kotlin

来自Kotlin's Coding Conventions

  

优选使用高阶函数(过滤器,映射等)进行循环。例外:forEach(除非使用forEach,否则最好使用常规的for循环,除非forEach的接收者为空,或者将forEach用作较长调用链的一部分)。

那是为什么?我为什么要使用:

val evenDigits = intArrayOf(0, 2, 4, 6, 8)
for (digit in evenDigits)
    println(digit)

代替:

intArrayOf(0, 2, 4, 6, 8).forEach { println(it) }

1 个答案:

答案 0 :(得分:1)

从性能和效率的角度来看,<input type="text" id="searchinput" class="search-input" placeholder="Search here.." /> <ul id="main-menu"> <li class="has-sub"><a href="javascript:;"><span class="title">Menu Header1</span></a> <ul> <li><a href="example.com"><span class="childtitle">brand one</span></a></li> <li><a href="example.com"><span class="childtitle">brand two</span></a></li> </ul> </li> <li class="has-sub"><a href="javascript:;"><span class="title">Menu Header2</span></a> <ul> <li><a href="example.com"><span class="childtitle">Car BMW</span></a></li> <li><a href="example.com"><span class="childtitle">Car Toyota</span></a></li> <li><a href="example.com"><span class="childtitle">Car Opel</span></a></li> <li><a href="example.com"><span class="childtitle">Car Kia</span></a></li> </ul> </li> </ul> 有时会更快一些,因为在某些情况下使用for可能会创建一些其他对象,但这并不引人注意。

我唯一会注意到的区别是,在使用forEach时,您没有forEach退出循环,可能有其他实现方法,但我认为不会可读性强,可能会造成混淆。

break的行为可以通过使用continue来实现,但是return@forEach却不能清楚地说明您的实际行为,特别是如果正在阅读代码的人是科特林专家。