Что такое noinline функция в Kotlin

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

Ответ

noinline — это модификатор в Kotlin, который указывает, что параметр функции типа inline не должен быть встроенным (inlined) при компиляции.

Зачем это нужно?

  1. Оптимизация: Если лямбда передаётся в другую не-inline функцию или сохраняется в переменную.
  2. Совместимость: Когда лямбда требует полноценного объекта (например, для рефлексии).

Пример:

inline fun processData(
    data: String,
    noinline onSuccess: (String) -> Unit, // Не будет встроена
    onError: (Exception) -> Unit           // Будет встроена
) {
    try {
        onSuccess(data.uppercase())
    } catch (e: Exception) {
        onError(e)
    }
}

Здесь onSuccess останется обычной лямбдой, а onError будет оптимизирована.