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.