Назад к вопросам
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 внутри лямбды.