Sobes.tech
Middle

Хусусиятҳои кор бо конструкторҳо ва оғозёбии объектҳо дар Kotlin чист?

sobes.tech AI

Ҷавоб аз AI

Дар Kotlin, синфҳо метавонанд конструктори асосӣ ва як ё чанд конструктори дуввумро дошта бошанд.

Конструктори асосӣ:

  • Дар сари синф эълон мешавад:
    class User(val номи: String, var синну сол: Int = 0) {
        // бадани синф
    }
    
  • Танаъзул надорад. Код ваҳдатсозӣ дар блокҳои init иҷро мешавад.
  • Хусусиятҳое, ки дар конструктори асосӣ бо val ё var эълон шудаанд, хусусиятҳои синф мешаванд.
  • Параметрҳои конструктор метавонанд дар блокҳои init ва ҳангоми инициализатсияи хусусиятҳо истифода шаванд:
    init {
        println("Инициализатсияи корбар $ном")
    }
    
    val тавсиф = "Корбар: $ном, синну сол: $синну сол"
    
  • Агар конструктори асосӣ ягон аннотация ё модификатор надошта бошад, калимаи constructor метавонад нодида гирифта шавад.

Блокҳои init:

  • Код ваҳдатсозӣ доранд, ки ҳангоми эҷоди намунаи синф иҷро мешаванд.
  • Дар тартиб иҷро мешаванд, ки дар он онҳо эълон шудаанд.
  • Пас аз даъвати конструктори асосӣ (агар бошад), аммо пеш аз конструкторҳои дуввум.

Конструкторҳои дуввум:

  • Бо калимаи constructor эълон мешаванд.
  • Мутобиқ метавонанд даъватро ба дигар конструкторҳои синф бо this() ё конструктори синфи асосӣ бо super() делегат кунанд. Ин даъват бояд аввалин дастур бошад.
    class User(val номи: String) {
        constructor(ном: String, синну сол: Int) : this(ном) {
            println("Конструктори дуввум")
            // Логикаи инициализатсия
        }
    }
    
  • Агар синф конструктори асосӣ дошта бошад, ҳама конструкторҳои дуввум бояд ё ба он мустақим ё ба воситаи this() делегат кунанд.

Тартиби инициализатсия:

  1. иҷрои коди конструктори асосӣ (агар бошад).
  2. иҷрои блокҳои init дар тартиби эълон.
  3. иҷрои коди конструктори дуввум (агар истифода шавад).

Масалан:

class Example(ном: String) {
    init {
        println("Блоки init аввал барои $ном")
    }

    val хусусият1 = "Хусусият 1"

    init {
        println("Блоки init дуввум барои $ном")
    }

    constructor(ном: String, синну сол: Int) : this(ном) {
        println("Конструктори дуввум барои $ном, синну сол $синну сол")
    }
}

fun main() {
    val ex1 = Example("Корбар1") // Натиҷа: Блоки init аввал барои Корбар1, Блоки init дуввум барои Корбар1
    val ex2 = Example("Корбар2", 30) // Натиҷа: Блоки init аввал барои Корбар2, Блоки init дуввум барои Корбар2, Конструктори дуввум барои Корбар2, синну сол 30
}

Хусусиятҳои асосӣ: синтаксиси декларативии конструктори асосӣ, истифодаи блокҳои init барои логикаи инициализатсия, делегатсияи ошкор дар конструкторҳои дуввум барои таъмини мутобиқат дар эҷоди объектҳо.