Sobes.tech
Back to questions
Junior — Middle
74

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

Companies where asked
СовкомбанкСовкомбанк
Viasat tech

Answer from AI

sobes.tech AI

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

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

crossinline запрещает non-local return, гарантируя, что лямбда не сможет прервать выполнение внешней функции. Это полезно, когда лямбда вызывается не напрямую, а, например, передается дальше или запускается в другом контексте.

Пример:

inline fun doSomething(crossinline action: () -> Unit) {
    val runnable = Runnable { action() }
    runnable.run()
}

Здесь crossinline нужен, чтобы в action нельзя было использовать return для выхода из doSomething, так как action вызывается внутри Runnable.