Kas yra plėtiniai Kotlin programavimo kalboje?
sobes.tech AI
Atsakymas iš AI
Kotlin išplėtimai leidžia pridėti naujas funkcijas ar savybes prie esamų klasių be paveldėjimo ar dekoratoriaus naudojimo.
Pagrindinės koncepcijos:
-
Išplėtimo funkcijos (Extension Functions): Prideda naujus metodus prie klasių.
// Išplėtimo funkcijos apibrėžimas fun String.removeWhitespaces(): String { return this.filter { it.isWhitespace().not() } } // Išplėtimo funkcijos naudojimas val myString = " Hello World " val cleanedString = myString.removeWhitespaces() // cleanedString bus "HelloWorld"Žodis
thisišplėtimo funkcijos viduje nurodo objektą, prie kurio taikomas išplėtimas (šiuo atvejumyString). -
Išplėtimo savybės (Extension Properties): Leidžia pridėti naujas savybes prie klasių, bet negali turėti būsenos, t.y. saugoti duomenis:
// Išplėtimo savybės apibrėžimas val <T> List<T>.lastIndex: Int get() = size - 1 // Naudojimas val myList = listOf(1, 2, 3) val indexLast = myList.lastIndex // indexLast bus 2Išplėtimo savybės turi turėti getter, o setter yra pasirinktinai.
Ypatybės:
-
Statinė dispečerizacija: Išplėtimo iškvietimas yra nustatomas pagal kintamojo tipą, o ne objekto tipą vykdymo metu. Tai skiriasi nuo virtualių metodų objektų orientuotame programavime.
open class Parent class Child : Parent() fun Parent.printType() = println("Parent") fun Child.printType() = println("Child") val p: Parent = Child() p.printType() // Išves "Parent", nes `p` tipo - Parent -
Privačios ir apsaugotos narės: Išplėtimo funkcijos negali pasiekti privačių ar apsaugotų klasės narių.
-
Kompaniijos objektų išplėtimas: Galima išplėsti klasės kompanijos objektus:
class MyClass { companion object { fun create() = MyClass() } } fun MyClass.Companion.printName() = println("MyClass kompanijos pavadinimas") MyClass.printName() // Išves "MyClass kompanijos pavadinimas" -
Matomumo sritis (Visibility): Išplėtimas turi būti deklaruotas faile ir importuotas naudoti kituose faile.
Išplėtimai yra galingas įrankis rašant skaitomą ir lankstų kodą, leidžiantį pridėti funkcionalumą prie klasių iš išorės, nekeičiant jų pradinio kodo.