Sobes.tech
Junior

Kotlin proqramlaşdırma dilində genişləndirmələr nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də genişləndirmələr mövcud siniflərə yeni funksiyalar və ya xüsusiyyətlər əlavə etməyə imkan verir; irs alma və ya dekoratorlardan istifadə etmədən.

Əsas anlayışlar:

  • Genişləndirmə funksiyaları: Siniflərə yeni metodlar əlavə edir.

    // Genişləndirmə funksiyasının təyini
    fun String.removeWhitespaces(): String {
        return this.filter { it.isWhitespace().not() }
    }
    
    // Genişləndirmə funksiyasından istifadə
    val myString = " Hello World "
    val cleanedString = myString.removeWhitespaces() // cleanedString "HelloWorld" olacaq
    

    Genişləndirmə funksiyasındakı this açar sözü, genişləndirmənin çağırıldığı obyektə istinad edir (yuxarıdakı nümunədə myString).

  • Genişləndirmə xüsusiyyətləri: Siniflərə yeni xüsusiyyətlər əlavə etməyə imkan verir, lakin mövcud vəziyyətə malik ola bilməzlər, yəni məlumat saxlaya bilməzlər. Hər girişdə hesablanır.

    // Genişləndirmə xüsusiyyətinin təyini
    val <T> List<T>.lastIndex: Int
        get() = size - 1
    
    // Genişləndirmə xüsusiyyətindən istifadə
    val myList = listOf(1, 2, 3)
    val indexLast = myList.lastIndex // 2
    

    Genişləndirmə xüsusiyyətləri getterə malik olmalıdır. Setter seçimi olmalıdır.

Xüsusiyyətlər:

  • Statik yönləndirmə: Genişləndirmənin çağırışı, obyektin işləmə vaxtındakı tipi deyil, dəyişənin tipinə əsaslanır. Bu, obyekt yönümlü proqramlaşdırmadakı virtual metodlardan fərqlidir.

    open class Parent
    class Child : Parent()
    
    fun Parent.printType() = println("Parent")
    fun Child.printType() = println("Child")
    
    val p: Parent = Child()
    p.printType() // "Parent" çap edir, çünki dəyişənin tipi Parent-dir
    
  • Özəl və protected üzvlər: Genişləndirmələr, genişləndirilən sinfin özəl və ya protected üzvlərinə daxil ola bilməz.

  • Companion obyekt genişləndirmələri: Sinifin companion obyektlərini genişləndirmək mümkündür.

    class MyClass {
        companion object {
            fun create() = MyClass()
        }
    }
    
    fun MyClass.Companion.printName() = println("MyClass Companion")
    
    MyClass.printName() // "MyClass Companion" çap edir
    
  • Görünürlük (Visibility): Genişləndirmələr, başqa fayllarda istifadə üçün faylda elan edilməli və idxal edilməlidir.

Genişləndirmələr, oxumaq və çevik kod yaratmaq üçün güclü vasitədir; üçüncü tərəf kitabxanalarının siniflərinə funksionallıq əlavə etməyə imkan verir, onların mənbə kodunu dəyişdirmədən.