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

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

Ответ

Пометка inline может быть разумной или неразумной в зависимости от контекста.

Разумно:

  • Для лямбда-функций, передаваемых в высокоуровневые функции (например, map, filter), чтобы избежать накладных расходов на создание анонимных классов.
  • Для небольших функций, часто вызываемых в цикле, чтобы избежать накладных расходов на вызов.
inline fun <T> List<T>.customFilter(predicate: (T) -> Boolean): List<T> {
    return filter(predicate) // Лямбда будет встроена
}

Неразумно:

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

Выбор зависит от производительности и читаемости кода.