Sobes.tech
Junior

Kotlin тилиндеги класстардагы баштапкы түзмөлөр жөнүндө айтып бериңиз.

sobes.tech AI

AIден жооп

Котлинде класстарда негизги жана бир нече экинчи конструкторлор болушу мүмкүн. Инициализаторлор — бул init блоктору, алар алардын жарыялануу тартибинде негизги конструктордон (эгер бар болсо) же экинчи конструктордон кийин ишке ашырылат.

Негизги конструктор

Түздөн-түз класс башталышында жарыяланат. Ал мүчөлөрдүн ылдамдыкта колдонулушу үчүн параметрлерди камтышы мүмкүн.

class User(name: String, age: Int) {
    init {
        // Бул блок класс объектисин түзүүдө ишке ашырылат
        println("User created: $name, $age")
    }
}

Экинчи конструкторлор

constructor ачкыч сөзү менен жарыяланат жана ар дайым ошол эле классдагы башка конструкторго делегирлөө керек, же негизгиге (this аркылуу), же башка экинчи конструкторго.

class User {
    init {
        // Бул блок биринчи болуп ишке ашырылат, эгер негизги конструктор бар болсо
    }

    constructor(name: String) : this() {
        // Экинчи конструктор 1
        println("User created with name: $name")
    }

    constructor(name: String, age: Int) : this(name) {
        // Экинчи конструктор 2, биринчи экинчи конструкторду чакырат
        println("User created with name and age: $name, $age")
    }
}

Ишке ашыруу тартиби

  1. Негизги конструктордогу код (эгер параметрлери болсо, алар колдонулат)
  2. init блоктору кезек-кезеги менен
  3. Чакырылган экинчи конструктордун коду (чалгандан кийин делегирлөө ишке ашырылат)

Мисал:

class Example {
    init {
        println("Init block 1")
    }

    constructor(i: Int) {
        println("Secondary constructor $i")
    }

    init {
        println("Init block 2")
    }
}

fun main() {
    Example(10)
}

Чыгуу:

Init block 1
Init block 2
Secondary constructor 10

Эгер экинчи конструктор чакырылса да, init блоктору дайыма анын алдында ишке ашырылат. Бул объекттин негизги инциализациясы аяктагандан кийин, экинчи конструктордун өзгөчө коду ишке ашырылат дегенди кепилдейт.

Инициализаторлор — бул бардык класс экземплярларын түзүүдө аткарылуучу логиканы ишке ашыруу үчүн маанилүү. Мисалы, кирүү маалыматтарын текшерүү же объекттин абалын орнотуу үчүн.