Kotlin dasturlash tilida kengaytmalar nima?
sobes.tech AI
AIdan javob
Kotlin'dagi kengaytmalar mavjud sinflarga yangi funksiyalar yoki xususiyatlar qo'shish imkonini beradi; meros olish yoki dekoratorlardan foydalanmasdan.
Asosiy tushunchalar:
-
Kengaytma funksiyalar: Sinflarga yangi metodlar qo'shadi.
// Kengaytma funksiyasining ta'rifi fun String.removeWhitespaces(): String { return this.filter { it.isWhitespace().not() } } // Kengaytma funksiyasidan foydalanish val myString = " Hello World " val cleanedString = myString.removeWhitespaces() // cleanedString "HelloWorld" bo'ladiKengaytma funksiyasidagi
thiskalit so'zi, kengaytma chaqirilayotgan ob'ektga ishora qiladi (yuqoridagi misoldamyString). -
Kengaytma xususiyatlari: Yangi xususiyatlar qo'shish imkonini beradi, lekin holatga ega bo'lmaydi, ya'ni ma'lumot saqlay olmaydi. Har kirishda hisoblanadi.
// Kengaytma xususiyatining ta'rifi val <T> List<T>.lastIndex: Int get() = size - 1 // Foydalanish val myList = listOf(1, 2, 3) val indexLast = myList.lastIndex // 2Kengaytma xususiyatlari getterga ega bo'lishi kerak. Setter ixtiyoriy.
Xususiyatlar:
-
Statik taqsimot: Kengaytma chaqiruvi, ob'ektning ish vaqtidagi turi emas, o'zgaruvchining turiga qarab aniqlanadi. Bu, ob'ektga yo'naltirilgan dasturlashdagi virtual metodlardan farq qiladi.
open class Parent class Child : Parent() fun Parent.printType() = println("Parent") fun Child.printType() = println("Child") val p: Parent = Child() p.printType() // "Parent" chiqaradi, chunki 'p' o'zgaruvchisining turi Parent -
Maxfiy va protected a'zolar: Kengaytmalar, kengaytirilayotgan sinfning maxfiy yoki protected a'zolariga kirish imkoniga ega emas.
-
Kompaniya ob'ekt kengaytmalari: Sinfning kompaniya ob'ektlarini kengaytirish mumkin.
class MyClass { companion object { fun create() = MyClass() } } fun MyClass.Companion.printName() = println("MyClass Companion") MyClass.printName() // "MyClass Companion" chiqaradi -
Ko'rinish (Visibility): Kengaytmalar faylda e'lon qilinishi va boshqa fayllarda foydalanish uchun import qilinishi kerak.
Kengaytmalar, o'qilishi oson va moslashuvchan kod yaratish uchun kuchli vositadir; tashqi kutubxonalar sinflariga funksionallik qo'shish imkonini beradi, ularning manba kodini o'zgartirmasdan.