Sobes.tech
Middle

Kotlin-də konstruktorlar və obyektlərin ilkinləşdirilməsi ilə işləməyin xüsusiyyətləri nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də sinflər birincil konstruktor və bir və ya daha çox ikincil konstruktorlara malik ola bilər.

Birincil konstruktor:

  • Sinfinin başlığında elan edilir:
    class User(val name: String, var age: Int = 0) {
        // sinf gövdesi
    }
    
  • Tənha deyil. İbtidai qurğulama kodu init bloklarında icra olunur.
  • val və ya var ilə elan olunan xüsusiyyətlər sinifin xüsusiyyətlərinə çevrilir.
  • Konstruktor parametrlərindən init bloklarında və xüsusiyyətlərin qurulmasında istifadə etmək olar:
    init {
        println("İstifadəçi başlanğıcı $name")
    }
    
    val description = "İstifadəçi: $name, yaş: $age"
    
  • Əgər birincil konstruktor heç bir şərh və ya görünüş modifikatoru yoxdursa, constructor sözünü atlamaq olar.

init blokları:

  • Sinif nümunəsi yaradılarkən icra olunan başlanğıc kodlarını ehtiva edir.
  • Sinifdə elan olunduğu ardıcıllıqla icra olunur.
  • Əgər varsa, birincil konstruktor çağırışından sonra, lakin ikincil konstruktorlardan əvvəl icra olunur.

İkincil konstruktorlar:

  • constructor sözü ilə elan edilir.
  • this() istifadə edərək öz sinfində başqa bir konstruktoru çağırışa və ya super() istifadə edərək əsas sinfin konstruktoruna delegasiya edə bilər. Delegasiya çağırışı ilk əməliyyat olmalıdır.
    class User(val name: String) {
        constructor(name: String, age: Int) : this(name) {
            println("İkincil konstruktor")
            // əlavə qurğulama loqikası
        }
    }
    
  • Əgər sinifdə birincil konstruktor varsa, bütün ikincil konstruktorlar açıq və ya qapalı şəkildə ona this() ilə delegasiya etməlidir.

İnitializasiya ardıcıllığı:

  1. Birincil konstruktorun kodunun icrası (əgər varsa).
  2. init bloklarının ardıcıllıqla icrası.
  3. İkincil konstruktorun kodunun icrası (əgər istifadə olunursa).

Nümunə:

class Example(name: String) {
    init {
        println("$name üçün ilk init bloku")
    }

    val property1 = "Xüsusiyyət 1"

    init {
        println("$name üçün ikinci init bloku")
    }

    constructor(name: String, age: Int) : this(name) {
        println("$name üçün ikincil konstruktor, yaş: $age")
    }
}

fun main() {
    val ex1 = Example("İstifadəçi1") // Çıxış: $name üçün ilk init bloku, $name üçün ikinci init bloku
    val ex2 = Example("İstifadəçi2", 30) // Çıxış: $name üçün ilk init bloku, $name üçün ikinci init bloku, ikincil konstruktor, yaş 30
}

Əsas xüsusiyyətlər: birincil konstruktor üçün deklarativ sintaksis, init bloklarından istifadə, ikincil konstruktorlarda açıq delegasiya, obyektlərin yaradılmasında ardıcıllığı təmin edir.