Почему нельзя сделать все функции inline

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

Ответ

Inline-функции в Kotlin разворачиваются во время компиляции, что устраняет накладные расходы на вызов функции. Однако есть ограничения:

  1. Размер кода: Каждый вызов inline-функции заменяется её телом, что увеличивает размер билда. Если функция большая или вызывается часто, это может негативно сказаться на производительности.

  2. Ограничения: В inline-функциях нельзя использовать нелокальные return (кроме лямбд с crossinline), и они не могут быть рекурсивными.

  3. Лямбды: Inline эффективен для функций с лямбда-параметрами, так как избегает создания анонимных классов. Но если лямбда передаётся в другую не-inline функцию, преимущество теряется.

Пример:

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