Sobes.tech
Junior — Middle

როდესაც ობიექტი იქმნება, თვისებების ინიციალიზაცია და კოდის ბლოკების შესრულება რა წესით ხდება, მათ შორის companion object, init ბლოკი, კონსტრუქტორში მყოფი ცვლადები და ჩვეულებრივი ცვლადები?

sobes.tech AI

პასუხი AI-სგან

როდესაც ქმნით ობიექტს Kotlin-ში, ინიცირების წესრიგი შემდეგია:

  1. companion object-ის ინიცირება — ხდება ერთხელ კლასის ჩატვირთვისას, ობიექტების შექმნამდე.
  2. კლასის სხეულში გამოყოფილი თვისებების ინიცირება (მათ შორის, რომლებიც გამოყოფილია კონსტრუქტორის გარეთ) — ინიცირებულია გამოყოფის წესით.
  3. init ბლოკების შესრულება — ისინი შესრულდება კლასში გამოყოფის წესით, თვისებების ინიცირებიდან անմիջապես შემდეგ.
  4. კონსტრუქტორში გამოყოფილი თვისებების (მაგ., val/var პარამეტრები) ინიცირება — ინიცირებულია კონსტრუქტორის გამოძახებისას.

მაგალითი:

class Example(val constructorProp: String) {
    val property1 = println("property1 ინიცირებულია")

    init {
        println("init ბლოკი 1")
    }

    val property2 = println("property2 ინიცირებულია")

    init {
        println("init ბლოკი 2")
    }

    companion object {
        init {
            println("companion object ინიცირებულია")
        }
    }
}

fun main() {
    val example = Example("კონსტრუქტორი")
}

გამომავალი დაახლოებით ასე იქნება:

companion object ინიცირებულია
property1 ინიცირებულია
init ბლოკი 1
property2 ინიცირებულია
init ბლოკი 2

ამ გზით, companion object ინიცირებულია ერთხელ კლასის ჩატვირთვისას, შემდეგ, ობიექტის შექმნისას, ინიცირებულია თვისებები და შესრულებულია init ბლოკები გამოყოფის წესით, ხოლო კონსტრუქტორის პარამეტრები ინიცირებულია კონსტრუქტორის გამოძახებისას.