首页 > 解决方案 > 为什么常规 for 循环优于 forEach?

问题描述

来自Kotlin 的编码约定

更喜欢使用高阶函数(过滤器、映射等)而不是循环。例外: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) }

标签: kotlin

解决方案


从性能和效率的角度来看for,有时会更快一些,因为forEach在某些情况下使用可能会创建一些额外的对象/对象,但这并不明显。

我能注意到的唯一区别是,在使用时forEach您不必break退出循环,可能还有其他方法可以实现它,但我认为这不会那么可读并且可能会令人困惑。

的行为continue可以通过 using 来实现,return@forEach但这并不能清楚地说明您实际在做什么,而continue确实如此,尤其是在阅读代码的人不是 kotlin 专家的情况下。


推荐阅读