Kotlin программалоо тилиндеги кеңейтүүлөр эмне?
sobes.tech AI
AIден жооп
Котлондо кеңейтүүлөр жаңы функцияларды же касиеттерди түзмө-түз класстарга кошууга мүмкүндүк берет, мурас алуу же декоратор колдонбоо менен.
Негизги концепциялар:
-
Кеңейтүү функциялары (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 болотКеңейтүү касиеттеринин геттери болушу керек, сеттери милдеттүү эмес.
Өзгөчөлүктөр:
-
Статикалык диспетчеризация: Кеңейтүүнүн чакыруусу өзгөрмөнүн түрүнө карап аныкталат, аткаруу учурунда эмес. Бул виртуалдык методдордон айырмаланат.
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): Кеңейтүүлөр файлда жарыялануусу керек жана башка файлдарда колдонуу үчүн импорттолушу керек.
Кеңейтүүлөр күчтүү инструмент болуп саналат, алардын жардамы менен сырттан келген китепканалардын класстарына функционалдуулук кошуп, алардын түпкү кодун өзгөртпөстөн, окула турган жана ийкемдүү код түзүүгө мүмкүндүк берет.