Ի՞նչ են ընդարձակումները Kotlin ծրագրավորման լեզվում։
sobes.tech AI
Պատասխան AI-ից
Կատարման ընդլայնումները Kotlin- ում թույլ են տալիս ավելացնել նոր ֆունկցիաներ կամ հատկություններ գոյություն ունեցող դասերին առանց ժառանգության կամ դեկորատորի օգտագործման:
Հիմնական գաղափարներ:
-
Ընդլայնման ֆունկցիաներ (Extension Functions): Ավելացնում են նոր մեթոդներ դասերին:
// Ընդլայնման ֆունկցիայի սահմանում fun String.removeWhitespaces(): String { return this.filter { it.isWhitespace().not() } } // Ընդլայնման ֆունկցիայի օգտագործում val myString = " Hello World " val cleanedString = myString.removeWhitespaces() // cleanedString կլինի "HelloWorld"thisբառը ընդլայնման ֆունկցիայի ներսում հղում է այն օբյեկտին, որի վրա կիրառվում է ընդլայնումը (այստեղ՝myString): -
Ընդլայնման հատկություններ (Extension Properties): Ավելացնում են նոր հատկություններ դասերին, բայց չեն կարող ունենալ վիճակ, այսինքն՝ չեն կարող պահել տվյալներ:
// Ընդլայնման հատկության սահմանում val <T> List<T>.lastIndex: Int get() = size - 1 // Օգտագործում val myList = listOf(1, 2, 3) val indexLast = myList.lastIndex // indexLast կլինի 2Ընդլայնման հատկությունները պետք է ունենան getter, setter-ը՝ ընտրովի:
Հատկանշական առանձնահատկություններ:
-
Ստատիկ դիսպետչերիզացիա: Ընդլայնման կանչը որոշվում է փոփոխականի տիպով, ոչ՝ օբյեկտի ժամանակի տիպով:
open class Parent class Child : Parent() fun Parent.printType() = println("Parent") fun Child.printType() = println("Child") val p: Parent = Child() p.printType() // Տպում է "Parent"՝ քանի որ `p` փոփոխականի տիպը՝ Parent -
Անհատական և պաշտպանված անդամներ: Ընդլայնումները չեն կարող դիմել անհատական կամ պաշտպանված անդամներին:
-
Ընդլայնումներ դասի-կոմպանիոնների համար: Կարող են ընդլայնել դասի-կոմպանիոնները:
class MyClass { companion object { fun create() = MyClass() } } fun MyClass.Companion.printName() = println("MyClass Կոմպանիոն") MyClass.printName() // Տպում է "MyClass Կոմպանիոն" -
Տեսանելիության տարածք (Visibility): Ընդլայնումները պետք է հայտարարվեն ֆայլում և ներմուծվեն՝ օգտագործելու համար այլ ֆայլերում:
Ընդլայնումները հզոր գործիք են կոդը ընթեռնելի և ճկուն դարձնելու համար, թույլ են տալիս ավելացնել ֆունկցիոնալություն արտաքին գրադարանների դասերին՝ առանց նրանց սկզբնական կոդը փոփոխելու: