Sobes.tech
Middle

Ako fungujú rozšírené funkcie v Kotlin?

sobes.tech AI

Odpoveď od AI

Rozširujúce funkcie umožňujú pridávať nové funkcie k existujúcim triedam bez dedičnosti alebo použitia dekorátorov.

Sú deklarované pomocou prefixu, ktorý označuje typ, ktorý bude rozšírený:

fun String.removeFirstChar(): String {
    // this odkazuje na objekt rozširovaného typu (String)
    return this.substring(1)
}

Pri volaní rozširujúcej funkcie ju prekladač premení na statickú metódu, ktorá ako prvý argument prijíma objekt rozširovaného typu:

// Volanie rozširujúcej funkcie
val original = "Hello"
val modified = original.removeFirstChar()

// Prekladač premení volanie približne takto:
// val modified = StringExtensionsKt.removeFirstChar(original) 

(Kde StringExtensionsKt je názov generovanej Kotlin triedy so statickými metódami, ak je rozširujúca funkcia mimo triedy.)

Rozširujúce funkcie nemodifikujú samotnú triedu. Poskytujú len syntaxický cukor na volanie statických metód. Nemajú prístup k súkromným alebo chráneným členom rozširovanej triedy.

Hlavnou výhodou je čitateľnejší kód, ktorý napodobňuje objektovo orientované programovanie, pričom sa vyhýba problémom dedičnosti.

Môžu byť rozšírené akékoľvek triedy, vrátane štandardných knižníc a tried Java. Funkcie rozšírenia môžu byť členmi inej triedy, v takom prípade sa volajú iba vnútri tejto triedy.

Pri riešení preťažení a konfliktov má prioritu členská funkcia triedy pred funkciami rozšírenia. Ak existuje viacero rozširujúcich funkcií so rovnakou signatúrou, má prioritu tá, ktorá je deklarovaná lokálne (v rovnakom rozsahu).