来自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) }
答案 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
却不能清楚地说明您的实际行为,特别是如果正在阅读代码的人是科特林专家。