Sobes.tech
Junior — Middle

Mi a szerepe a noinline kulcsszóval ellátott függvénynek, és mikor érdemes használni?

sobes.tech MI

Válasz az MI-től

A noinline kulcsszó Kotlinban (amelyet Android fejlesztésben használnak) azt jelzi a fordítónak, hogy ne inline-olja (ne ágyazza be) a függvényt fordítás közben.

Általában az inline módosítóval ellátott függvények úgy kerülnek fordításra, hogy a törzsük be legyen szúrva a hívás helyére, ez csökkenti a függvényhívási költségeket és javíthatja a teljesítményt.

Azonban vannak olyan helyzetek, amikor az inline nem kívánatos:

  • A függvény nagy, és az inline növeli a bytecode méretét.
  • A függvényt több helyen használják, és az inline duplikálja a kódot.
  • Hibakereséshez jobb, ha a függvény külön egységként marad.

Használati példa:

inline fun foo(block: () -> Unit) {
    println("Blokk előtt")
    block()
    println("Blokk után")
}

// Inline tiltása egy adott függvényre
inline fun bar(block: () -> Unit) noinline {
    println("Bar kezdete")
    block()
    println("Bar vége")
}

Itt a noinline alkalmazva van a függvény paraméterére, hogy megakadályozza a lambda inline-olását. Általánosságban a noinline akkor használandó, amikor a függvényt vagy lambdát külön objektumként szeretnénk megőrizni, például más helyekre való átadás vagy hibakeresés céljából.