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).