Sobes.tech
Middle

Jak fungují rozšiřující funkce v Kotlinu?

sobes.tech AI

Odpověď od AI

Rozšiřující funkce umožňují přidávat nové funkce ke stávajícím třídám bez dědičnosti nebo použití dekorátorů.

Jsou deklarovány pomocí předpony, která označuje typ, který bude rozšířen:

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

Při volání rozšiřující funkce ji překladač převede na statickou metodu, která jako první argument přijímá objekt rozšiřovaného typu:

// Volání rozšiřující funkce
val original = "Hello"
val modified = original.removeFirstChar()

// Překladač převeďte volání přibližně takto:
// val modified = StringExtensionsKt.removeFirstChar(original) 

(Kde StringExtensionsKt je název generované třídy Kotlin s statickými metodami, pokud je rozšiřující funkce mimo třídu.)

Rozšiřující funkce nemění samotnou třídu. Nabízejí pouze syntaktický cukr pro volání statických metod. Nemají přístup k soukromým nebo chráněným členům rozšiřované třídy.

Hlavní výhodou je čitelnější kód, který napodobuje objektově orientované programování, a přitom se vyhýbá problémům dědičnosti.

Lze rozšiřovat jakoukoli třídu, včetně standardních knihoven a tříd Java. Rozšiřující funkce mohou být členy jiné třídy, v takovém případě jsou volány pouze uvnitř této třídy.

Při řešení přetížení a konfliktů má přednost členská funkce třídy před rozšiřující funkcí. Pokud existuje několik rozšiřujících funkcí se stejnou signaturou, má prioritu ta, která je deklarována lokálně (ve stejném rozsahu).