Sobes.tech
Назад к вопросам
Junior — Middle
77

Можете объяснить, что означает использование ключевого слова crossinline в Kotlin и в каких случаях оно применяется?

Компании, где спрашивали
WildberriesWildberries
ПромсвязьбанкПромсвязьбанк
ПСБ
Платформа Трим
Леруа МерленЛеруа Мерлен
Инити

Ответ от нейросети

sobes.tech AI

В Kotlin ключевое слово crossinline используется в объявлении inline-функций для параметров-функций (лямбд), чтобы запретить использование оператора return из лямбды, который пытается выйти из внешней функции.

Когда функция помечена как inline, лямбда-параметры могут использовать return для выхода из внешней функции (non-local return). Но если лямбда передаётся в другую функцию или запускается асинхронно, такой return невозможен.

crossinline запрещает non-local return, позволяя безопасно использовать лямбду в таких контекстах.

Пример:

inline fun doSomething(crossinline action: () -> Unit) {
    val runnable = Runnable {
        action() // нельзя использовать non-local return здесь
    }
    runnable.run()
}

Здесь crossinline гарантирует, что action не будет пытаться сделать non-local return, что предотвращает ошибки компиляции.