Sobes.tech
Middle

Kotlin-də genişləndirmə funksiyaları necə işləyir?

sobes.tech Süni İntellekt

AI-dan cavab

Genişləndirmə funksiyaları mövcud sinflərə yeni funksiyalar əlavə etməyə imkan verir, onlardan irs almaq və ya dekoratorlardan istifadə etmədən.

Onlar genişləndiriləcək tipi göstərən prefiks ilə elan edilir:

fun String.removeFirstChar(): String {
    // this genişləndirilən tipin (String) obyektinə istinad edir
    return this.substring(1)
}

Genişləndirmə funksiyasını çağırarkən, tərtibçi onu statik metod kimi çevirir, və bu metod ilk arqument kimi genişləndirilən obyekti qəbul edir:

// Genişləndirmə funksiyasını çağırış
val original = "Hello"
val modified = original.removeFirstChar()

// Tərtibçi çağırışı təxminən belə çevirir:
// val modified = StringExtensionsKt.removeFirstChar(original) 

(Burada StringExtensionsKt statik metodlar ilə yaradılmış Kotlin sinfinin adıdır, əgər genişləndirmə funksiyası sinifdən kənarda yerləşirsə.)

Genişləndirmə funksiyaları sınıfı dəyişmir. Onlar sadəcə statik metodların çağırılması üçün sintaktik şəkil təmin edir. Onlar genişləndirilmiş sinfin xüsusi və ya qorunan üzvlərinə girişə malik deyillər.

Əsas üstünlük daha oxunaqlı kod, obyekt yönümlü proqramlaşdırmanı təqlid edir, irs problemlərindən qaçmağa kömək edir.

Hər hansı sinfi genişləndirmək mümkündür, o cümlədən standart kitabxanalar və Java sinfləri. Genişləndirmə funksiyaları başqa bir sinfin üzvü ola bilər, onda onlar yalnız həmin sinif daxilində çağırılır.

Yüklemələr və münaqişələrin həllində, sinfin üzv funksiyaları genişləndirmə funksiyalarına üstünlük verir. Əgər eyni imzaya malik bir neçə genişləndirmə funksiyası varsa, yerli olaraq (eyni sahədə) elan edilən prioritetə malikdir.