Junior — Middle
80
Kotlin-да noinline және crossinline директивалары қалай ерекшеленеді, және олардың қолданылу ерекшеліктері қандай?
Сұралған компаниялар
Effective Technologies
AI-дан жауап
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 внутри лямбды.