> Что такое crossinline в Kotlin и зачем он нужен (Kotlin, Android)

Уровень: junior · Роль: mobile · Категория: Технические вопросы

Компании: TrendTech

Стек: Kotlin, Android

> Пример ответа

crossinline - это модификатор для лямбда-параметров inline-функций. Он запрещает нелокальный return внутри этой лямбды, но при этом сохраняет инлайнинг кода.

Зачем нужен:
Когда вы объявляете inline-функцию, её лямбда-параметры по умолчанию могут использовать return для выхода из внешней функции (нелокальный return). Это удобно, но опасно, если лямбда передаётся в другой контекст (например, в лямбду другого объекта или в корутину). crossinline явно запрещает такой return, заставляя использовать только локальный return@label.

Пример:

inline fun runInScope(crossinline block: () -> Unit) {
    val runnable = Runnable { block() } // без crossinline здесь будет ошибка компиляции
    runnable.run()
}

fun main() {
    runInScope {
        // return // Ошибка: 'return' is not allowed here
        println("Работает")
    }
}

Без crossinline компилятор выдаст ошибку, потому что нелокальный return не может быть выполнен внутри Runnable. Модификатор решает эту проблему, сохраняя производительность инлайна.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью