Sobes.tech
Middle

Kotlin'da kengaytirish funksiyalari qanday ishlaydi?

sobes.tech AI

AIdan javob

Кенгайтириш функциялари мавжуд синфларга янгича функциялар қўшишга имкон беради, улардан мерос олиш ёки декораторлардан фойдаланмай.

Улар типни кўрсатувчи префикс ёрдамида эълон қилинади:

fun String.removeFirstChar(): String {
    // this кенгайтирилаётган типнинг (String) объектига ишора қилади
    return this.substring(1)
}

Кенгайтириш функциясини чақирганда, компилятор уни статик методга айлантиради, у биринчи аргумент сифатида кенгайтирилаётган объектни олади:

// Кенгайтириш функциясини чақириш
val original = "Hello"
val modified = original.removeFirstChar()

// Компилятор чақиришни тахминан шундай қилиб ўзгартириши мумкин:
// val modified = StringExtensionsKt.removeFirstChar(original) 

(Бу ерда StringExtensionsKt — бу статик методлар билан генерланган Kotlin синфи номи, агар кенгайтириш функцияси синфдан ташқари бўлса.)

Кенгайтириш функциялари синфни ўзгартирмайди. Улар фақат статик методларни чақириш учун синтаксик шаклни тақдим этади. Улар хусусий ёки ҳимояланган аъзоларга киришга эга эмас.

Асосий афзаллиги — коднинг ўқилиши осонлашади, объектга йўналтирилган дастурлашни имитация қилади, мерос масалаларидан қочишга ёрдам беради.

Ҳар қандай синфни кенгайтириш мумкин, жумладан стандарт китобхоналар ва Java синфлари. Кенгайтириш функциялари бошқа синфнинг аъзолари бўлиши мумкин, у ҳолда улар фақат ушбу синфда чақирилади.

Юкламалар ва зиддиятларни ҳал қилишда, синфнинг аъзолик функциялари кенгайтириш функцияларига устунлик қилади. Агар бир неча кенгайтириш функциялари бир хил имзога эга бўлса, улардан маҳаллий (шахсий) эълон қилингани устунлик қилади.