Какие знаешь ограничения у inline функции

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

Ответ

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

  1. Размер кода: Слишком большие inline-функции увеличивают размер билда, так как код дублируется в каждом месте вызова.
  2. Рекурсия: Не поддерживается рекурсивный вызов inline-функций, так как это привело бы к бесконечному разворачиванию кода.
  3. Публичные API: Если inline-функция объявлена как public или protected в классе, она не может обращаться к приватным членам этого класса.
  4. Лямбды с return: В inline-функциях можно использовать нелокальный return из лямбды, что может быть неожиданным поведением.

Пример:

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