Чӣ гуна васеъкунии дар забони барномасозии 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Хосиятҳои тавзењ бояд геттер дошта бошанд. Сеттери он интихобӣ аст.
Хусусиятҳо:
-
Диспетчеризатсияи статикӣ: Зов кардани тавзењ ба навъе муайян мешавад, ки навъи тағирёбанда, на навъи объект дар вақти иҷро. Ин аз методҳои виртуалӣ дар барномасозии объектӣ фарқ мекунад.
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 -
Ҳуҷраҳои private ва protected: Тавзењҳо наметавонанд ба ҳуҷраҳои private ё protected дар синфе, ки онҳо тавзењ дода шудаанд, дастрасӣ пайдо кунанд.
-
Тавзењҳо барои объекти-компаньон: Мумкин аст, ки объектҳои-компаньонро тавзењ дод.
class MyClass { companion object { fun create() = MyClass() } } fun MyClass.Companion.printName() = println("MyClass Companion") MyClass.printName() // Натиҷа "MyClass Companion" хоҳад буд -
Диапазони намоиш (Visibility): Тавзењҳо бояд дар файл эълон шаванд ва сипас барои истифода дар дигар файлҳо ворид карда шаванд.
Тавзењҳо воситаи қавӣ барои сохтани коди хонданӣ ва чандир мебошанд, ки имкон медиҳанд, ки функсионалиятро ба синфҳо аз китобхонаҳои беруна илова кунанд, бе тағир додани коди манбаъии онҳо.