Middle
Kotlinдеги делегация деген эмне?
sobes.tech AI
AIден жооп
Kotlin-дегиелөө — бул дизайн үлгүсү, анда объект (делегат) башка объекттин атынан белгилүү бир тапшырманы аткаруу жоопкерчилигин алат. Kotlin синтаксис деңгээлинде жеке делегирүүнү колдойт.
Kotlinдо эки негизги делегирүү түрү бар:
-
Класс делегирүү (Class Delegation): A классы интерфейсти ишке ашырат, ал эми бул интерфейсинин бардык метод чакырууларын башка объект Bге делегирет.
interface Base { fun printMessage() } class BaseImpl(val x: Int) : Base { override fun printMessage() { // Интерфейс методунун ишке ашырылышы println(x) } } class Derived(b: Base) : Base by b // Base классына делегирүүМисалда
DerivedBaseреализациясынbобъектисине делегирет. -
Мүлктөрдү делегирүү (Delegated Properties): Мүлктүн алуу жана коюу логикасын башка объектке делегиретүүгө мүмкүндүк берет. Kotlin бир нече стандарттык делегаторлорду сунуштайт:
lazy()— кечиктирилген инициализация үчүн.val lazyValue: String by lazy { // Биринчи кайрылууда гана ишке ашат println("есептелүүдө!") "Салам" }Delegates.observable()— угучуларга өзгөрүүлөр тууралуу кабарлоо үчүн.import kotlin.properties.Delegates var name: String by Delegates.observable("initial value") { prop, old, new -> println("$old -> $new") }Delegates.vetoable()— өзгөрүүлөрдү алдын ала кармоо үчүн.import kotlin.properties.Delegates var max: Int by Delegates.vetoable(0) { prop, old, new -> new > old }- Карта мүлктөрү менен байланыштыруу делегаторлору (
map).Колдонуу:class User(val map: Map<String, Any?>) { val name: String by map val age: Int by map }User(mapOf("name" to "John Doe", "age" to 25))
Kotlinдо делегирүүнүн артыкчылыктары:
- Бойлерплейтти азайтуу: Метод чакырууларын же мүлктүн логикасын автоматтык түрдө багыттоо.
- Кодду кайра колдонуу: Даяр делегаторлорду колдонуу же өздөрүн түзүү мүмкүнчүлүгү.
- Жоопкерчиликти бөлүү: Мүлктүн же интерфейсдин логикасын так бөлүү.
- Ийкемдүүлүк: Делегирүүнүн жүрүм-турумун өзгөртүү классты өзгөртпөстөн мүмкүнчүлүк.