Sobes.tech
Junior — Middle

Kotlin'da ichki arxitektura darajasida funktsiyalar kengaytirish mexanizmi qanday amalga oshiriladi?

sobes.tech AI

AIdan javob

Kotlin'da funksiyalarni kengaytirish mexanizmi kompilyator darajasida amalga oshirilgan, JVM darajasida emas. Kompilyatsiya paytida kengaytirilgan funksiya statik metodga aylantiriladi va birinchi parametr sifatida kengaytirilayotgan ob'ekt qabul qilinadi. Bu kengaytmalar asl sinfni o'zgartirmaydi va sinfning bayt-kodiga metodlar qo'shmaydi, faqat nuqta bilan chaqiriladigan tashqi funksiyalarni yaratadi.

Masalan, String sinfi uchun kengaytma:

fun String.lastChar(): Char = this.get(this.length - 1)

val c = "Kotlin".lastChar()  // kengaytma chaqiruvi

Kompilyator taxminan quyidagicha statik metod yaratadi:

public static char lastChar(String receiver) {
    return receiver.charAt(receiver.length() - 1);
}

Shu tarzda, kengaytmalar sintaksis shakar bo'lib, ular sinf tuzilmasini o'zgartirmaydi, balki tashqi funksiyalarni chaqirish uchun qulay usulni qo'shadi.