Приложения лямбда-выражений во встроенных функциях встроены, это заканчивается непосредственно в коде метода.

ользовал следующий код для измерения производительности различных синтаксических конструкций в Kotlin

fun time(what: String, body: () -> Int) {
    val start = System.currentTimeMillis()
    var sum = 0

    repeat(10) {
        sum += body()
    }

    val end = System.currentTimeMillis()

    println("$what: ${(end - start) / 10}")
}

val n = 200000000
val rand = Random()
val arr = IntArray(n) { rand.nextInt() }

time("for in range") {
    var sum = 0
    for (i in (0 until n))
        sum += arr[i]
    sum
}

time("for in collection") {
    var sum = 0
    for (x in arr)
        sum += x
    sum
}

time("forEach") {
    var sum = 0
    arr.forEach { sum += it }
    sum
}

time("range forEach") {
    var sum = 0
    (0 until n).forEach { sum += arr[it] }
    sum
}

time("sum") {
    arr.sum()
}

И вот результат, который я получил:

для в диапазоне: 84
за в коллекции: 83
forEach: 86
диапазон для каждого: 294
сумма: 83

Итак, мой вопрос: почему диапазон forEach намного медленнее, чем другие синтаксические конструкции?
Мне кажется, что компилятор может генерировать одинаковый байт-код во всех случаях (но не в случае «range forEach»)

Ответы на вопрос(2)

Ваш ответ на вопрос