Junior — Middle
Quelle est la différence entre les directives noinline et crossinline en Kotlin, et quelles sont leurs particularités d'utilisation?
sobes.tech IA
Réponse de l'IA
В 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 внутри лямбды.