В чем разница между обычной функцией и inline-функцией

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

Ответ

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

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

  • Уменьшает overhead вызова (особенно полезно для маленьких часто вызываемых функций)
  • Позволяет использовать параметры с reified generics

Недостатки inline:

  • Увеличивает размер бинарного кода (тело функции копируется в каждое место вызова)
  • Не поддерживает некоторые возможности (например, non-local returns из лямбд)

Пример:

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