Sobes.tech
Middle

Kotlinдеги кеңейтүү функциялары кантип иштейт?

sobes.tech AI

AIден жооп

Кеңейтүү функциялары бар болсо, алар бар класстарга жаңы функцияларды мурас алуу же декораторлорду колдонбостон кошууга мүмкүндүк берет.

Алар типти көрсөтүүчү префикс менен жарыяланат, ал кеңейтилүүчү типти көрсөтөт:

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 класстары да. Кеңейтүү функциялары башка класстын мүчөлөрү болушу мүмкүн, андай учурда алар гана ошол класста чакырылат.

Жүктөө жана кагылышууларды чечүүдө, класс мүчө функциялары кеңейтүү функцияларынан артыкчылыкка ээ. Эгер бирдей имзасы бар бир нече кеңейтүү функциясы болсо, локалдуу (ошол эле чөйрөдө) жарыяланган функция артыкчылыкка ээ болот.