Модификатор noinline в Kotlin используется, чтобы предотвратить инлайнинг конкретных lambda-параметров внутри inline-функции. По умолчанию все lambda-параметры inline-функции раскрываются в месте вызова, но noinline даёт тебе контроль над отдельными лямбдами, когда требуется поведение обычного объекта.
Когда функция помечена как inline, компилятор заменяет вызов функции на её тело. Однако если лямбда должна вести себя как обычный объект, инлайнинг должен быть отключён для этого параметра.
inline fun process(
inlinedLambda: () -> Unit,
noinline nonInlinedLambda: () -> Unit
) {
inlinedLambda()
someList.add(nonInlinedLambda) // only possible because of noinline
}
noinlineИспользуй noinline, когда тебе нужно:
Модификатор noinline существует потому, что инлайненная лямбда теряет свою идентичность как объект — её нельзя сохранить, передать или вернуть как обычную ссылку на функцию. Пометив её noinline, ты сохраняешь её как полноценный функциональный объект, ценой отказа от оптимизации производительности, которую даёт инлайнинг.
Модификатор noinline предотвращает inlining параметра-лямбды, позволяя ей храниться в коллекциях или передаваться в non-inline функции.
Новый — ещё не проверен сообществом
Вы