Middle+
Mit használ a `crossinline` módosító Kotlinban?
sobes.tech MI
Válasz az MI-től
A crossinline módosító az inline függvények lambda paramétereinek megjelölésére szolgál.
Azt jelzi a fordítónak, hogy a megfelelő lambda nem hajthat végre nem helyi visszatérést (non-local return), azaz nem használhatja a return utasítást a külső függvényből való kilépéshez. Ugyanakkor a lambda továbbra is beilleszthető (inlined) a hívás helyén.
Példa:
// Normál inline függvény nem helyi visszatéréssel
inline fun runTask(task: () -> Unit) {
task() // Nem helyi visszatérés megengedett a task()-ból
println("Feladat befejezve")
}
// crossinline paraméterrel ellátott inline függvény
inline fun runSafeTask(crossinline task: () -> Unit) {
// try-finally blokk példaként, ahol szükség van crossinline-ra
try {
task() // NEM szabad nem helyi visszatérést végrehajtani a task()-ból
} finally {
println("Takarítás")
}
println("Biztonságos feladat befejezve")
}
fun main() {
// A runTask használata
runTask {
println("A runTask lambda belseje")
return // ENGEDÉLYEZETT: nem helyi visszatérés a main()-ből
}
// A "Feladat befejezve" nyomtatás NEM fog megtörténni
// A runSafeTask használata
runSafeTask {
println("A runSafeTask lambda belseje")
// return // Fordító hiba: nem engedélyezett nem helyi visszatérés
}
println("A biztonságos feladat után") // Ez a nyomtatás végrehajtódik
}
Mikor hasznos:
- Amikor garantálni szeretnéd, hogy a
crossinlinelambda hívása után a kód végrehajtódik (pl.try-finallyblokkokban). - Amikor a lambda másik függvény argumentumaként kerül átadásra, amely nem inline, és el akarod kerülni a nem helyi visszatérést, ami megszakíthatja a végrehajtás folyamatát.