Sobes.tech
Junior — Middle

Мо метавонед шарҳ диҳед, ки истифодаи калимаи калидии crossinline дар Kotlin чӣ маъно дорад ва дар кадом ҳолатҳо истифода мешавад?

sobes.tech AI

Ҷавоб аз AI

Дар Kotlin калидии crossinline дар контексти функсияҳои inline ва lambda истифода мешавад. Он ба параметрҳои функсия татбиқ мешавад, то истифодаи операторҳои non-local return-ро манъ кунад.

Вақте ки функсия ҳамчун inline нишон дода мешавад, параметрҳои lambda низ метавонанд ба коди функсияи даъваткунанда дохил шаванд. Одатан, дар чунин lambda-ҳо, метавон return-ро истифода бурд барои хориҷ шудан аз функсияи беруни (non-local return). Аммо агар lambda ба функсияи дигар гузошта шавад ё ба таври асинхрон иҷро шавад, чунин баргашт имконнопазир аст.

crossinline баргашти non-local-ро манъ мекунад ва кафолат медиҳад, ки lambda наметавонад иҷрои функсияи беруниро қатъ кунад. Ин дар ҳолате муфид аст, ки lambda мустақим даъват нашуда, балки ба мисол, ба дигар функсия гузошта ё дар контексти дигар иҷро мешавад.

Масалан:

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

Ин ҷо, crossinline зарур аст, то дар action истифодаи return барои хориҷ шудан аз doSomething манъ шавад, зеро action дар дохили Runnable даъват мешавад.