Проверяет знание оптимизаций и ограничений при инлайнинге функций и лямбд в Kotlin.
inline заставляет компилятор встраивать тело функции и её лямбд в место вызова, избавляя от создания объектов. noinline отключает инлайнинг для конкретного параметра-лямбды внутри inline-функции. crossinline запрещает использование return из лямбды, гарантируя, что она не будет немедленно вызывать выход из родительской функции.
inline fun:
Встраивает тело в место вызова, убирая оверхед вызова и аллокации лямбды.
noinline:
Используется для лямбд-параметров, которые не надо инлайнить (например, передающиеся дальше).
crossinline:
Запрещает нелокальный return из лямбды, чтобы компилятор мог её безопасно инлайнить в другие контексты.
Пример:
inline fun measure(block: () -> Unit, noinline onError: (Throwable) -> Unit) {
try {
block()
} catch (e: Throwable) {
onError(e)
}
}
inline fun runWithCallback(crossinline callback: () -> Unit) {
val runnable = Runnable { callback() }
Thread(runnable).start()
}Когда использовать:
inline — для высокочастотных коротких функций с лямбдами.
noinline — когда лямбда хранится или передаётся дальше.
crossinline — когда нельзя допустить return из лямбды.