Sobes.tech
Junior — Middle

Konstruktor ichida va data classning asosiy tanasida maydonlarni e'lon qilish o'rtasidagi farq nima?

sobes.tech AI

AIdan javob

Kotlinda, asosiy konstruktor ichida (sinf nomidan keyin qavs ichida) e'lon qilingan maydonlar avtomatik ravishda sinfning xususiyatlariga aylantiriladi va mos equals(), hashCode(), toString() metodlariga ega bo'ladi, shuningdek, destrukturalashda qatnashadi.

Misol:

data class User(val name: String, val age: Int)

Bu yerda name va age sinfning xususiyatlaridir.

Agar sinf tanasida (masalan, konstruktor ichida yoki oddiy xususiyat sifatida) maydon e'lon qilinsa, u avtomatik yaratilgan data class metodlariga qatnashmaydi va destrukturalashda bo'lmaydi:

data class User(val name: String) {
    var age: Int = 0
}

Bu yerda age oddiy xususiyat bo'lib, equals va boshqa metodlarda hisobga olinmaydi.

Shuning uchun, asosiy konstruktor e'lon qilish maydonni "ma'lumot" qismiga aylantiradi, tana ichida e'lon qilish esa faqat qo'shimcha xususiyat hisoblanadi.