Sobes.tech
Назад к вопросам
Junior — Middle
65

Как различаются директивы noinline и crossinline в Kotlin, и в чем их особенности использования?

Компании, где спрашивали
Effective Technologies

Ответ от нейросети

sobes.tech AI

В Kotlin noinline и crossinline — это модификаторы параметров функций высшего порядка, используемых в inline-функциях.

  • noinline запрещает компилятору инлайнить конкретный лямбда-параметр. Это полезно, если нужно передать лямбду дальше или сохранить её в переменную, так как обычные inline-параметры не могут быть сохранены.

  • crossinline запрещает использование операторов return из лямбды, которые пытаются выйти из внешней функции. Это предотвращает некорректный выход из inline-функции через лямбду, но при этом позволяет инлайнить лямбду.

Пример:

inline fun example(crossinline action: () -> Unit, noinline noInlineAction: () -> Unit) {
    val runnable = Runnable { action() } // crossinline позволяет
    noInlineAction() // noinline параметр не инлайнится
}

Таким образом, noinline отключает инлайнинг для параметра, а crossinline ограничивает использование non-local return внутри лямбды.