Junior — Middle
Kotlin-də daxili memarlıq səviyyəsində funksiyaların genişləndirilməsi mexanizmi necə həyata keçirilir?
sobes.tech Süni İntellekt
AI-dan cavab
Kotlin-də funksiyaların genişləndirilməsi mexanizmi kompilyator səviyyəsində həyata keçirilir, JVM səviyyəsində deyil. Tərtib zamanı genişləndirilmiş funksiya statik metod kimi çevrilir və ilk parametr kimi genişləndirilən obyekt qəbul edilir. Bu, genişləndirmələrin orijinal sinfi dəyişdirmədiyi və sinfin bayt-koduna metodlar əlavə etmədiyi, sadəcə nöqtə ilə çağırış sintaksisi ilə xarici funksiyalar yaratdığı anlamına gəlir.
Məsələn, String sinfi üçün genişləndirmə:
fun String.lastChar(): Char = this.get(this.length - 1)
val c = "Kotlin".lastChar() // genişləndirmə çağırışı
Kompilyator təxminən aşağıdakı kimi statik metod yaradacaq:
public static char lastChar(String receiver) {
return receiver.charAt(receiver.length() - 1);
}
Beləliklə, genişləndirmələr sintaktik şəkərdir və sinflərin quruluşunu dəyişmir, sadəcə xarici funksiyaları çağırmaq üçün rahat yol əlavə edir.