Можно ли делать каждую функцию inline

«Можно ли делать каждую функцию inline» — вопрос из категории Kotlin, который задают на 23% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Kotlin inline-функции полезны для оптимизации лямбда-вызовов, уменьшая накладные расходы на создание анонимных классов. Однако не стоит делать все функции inline:

  1. Преимущества:

    • Уменьшает overhead при передаче лямбд (не создает Function-объекты).
    • Позволяет использовать non-local returns внутри лямбд.
  2. Недостатки:

    • Увеличивает размер бинарного кода (тело функции копируется в каждое место вызова).
    • Бесполезно для простых функций без лямбд (компилятор может проигнорировать inline).

Пример:

inline fun <T> measureTime(block: () -> T): T {
    val start = System.currentTimeMillis()
    val result = block()
    println("Time: ${System.currentTimeMillis() - start}ms")
    return result
}

Когда избегать:

  • Большие функции (раздувание кода).
  • Функции без лямбда-параметров (оптимизация незначительна).

Используйте inline осознанно, а не для всех функций.