data class Kotlin-da faqat ma'lumotlarni saqlash uchun mo'ljallangan maxsus sinf turidir. Kompilyator primary constructor-da ko'rsatilgan xususiyatlar asosida avtomatik ravishda equals, hashCode, toString, copy va componentN metodlarini yaratadi. JetBrains (2026) hujjatlariga ko'ra, data class Java ekvivalentlariga nisbatan shablon kod hajmini 50–70% ga kamaytirish imkonini beradi va Kotlin loyihalarida value-obyektlar uchun asos bo'lib xizmat qiladi.
Asosiy ma'lumot
data class — asosiy maqsadi ma'lumotlarni saqlash bo'lgan sinflar uchun standart metodlarni avtomatik yaratadigan Kotlin sintaktik konstruksiyasidir. Data class e'lon qilinganda, kompilyator primary constructor-dagi barcha xususiyatlar asosida equals, hashCode, toString, copy va componentN implementatsiyalarini yaratadi.
Java-dagi oddiy sinflardan farqli o'laroq, ishlab chiqaruvchi IDE yoki Lombok kabi kutubxonalar yordamida qo'lda getter, setter, equals, hashCode va toString yozishi kerak, Kotlin esa ichki mexanizmni taqdim etadi. Bu nafaqat kodni qisqartiradi, balki izchillikni kafolatlaydi — avtomatik metodlar har doim xususiyatlarning joriy tuzilishiga mos keladi.
JetBrains Kotlin Survey (2025) ma'lumotlariga ko'ra, data class Kotlin loyihalarining 78% ida ishlatiladi, bu uni tilning eng ko'p talab qilinadigan imkoniyatlaridan biriga aylantiradi. U ayniqsa DTO, API javob modellari va MVVM-dagi state-obyektlari bo'lgan arxitekturalarda mashhur.
data class class oldida data kalit so'zi bilan e'lon qilinadi. Avtomatik metodlarda ishtirok etadigan barcha xususiyatlar primary constructor-da ko'rsatiladi.
data class User(
val id: Int,
val name: String,
val email: String
)
Bitta satr kod Java-dagi o'nlab satr boilerplate-ni almashtiradi. Kompilyator barcha uch xususiyat uchun equals, hashCode, toString, copy va component1–component3 ni yaratadi.
Avtomatik metodlar faqat primary constructor-dagi xususiyatlarni o'z ichiga oladi. Agar sinf tanasida xususiyat e'lon qilinsa, u equals, hashCode, toString va copy da ishtirok etmaydi.
data class Product(
val id: Int,
val title: String
) {
var cachedPrice: Double = 0.0
// cachedPrice equals/hashCode/copy ga KIRITILMAGAN
}
Primary constructor data class kamida bitta parametrni o'z ichiga olishi kerak. Barcha parametrlar val yoki var bilan belgilanishi kerak. Data class uchun open, abstract, sealed yoki inner modifikatorlaridan foydalanish mumkin emas.
equals va hashCode primary constructor-dagi barcha xususiyatlarning qiymatlari asosida yaratiladi. Data class ning ikkita namunasi, agar ularning barcha tegishli xususiyatlari teng bo'lsa, teng deb hisoblanadi.
Java-da obyektlarning standart taqqoslanishi havolani taqqoslash (==). Qiymat bo'yicha taqqoslash uchun equals-ni override qilish talab qilinadi. Kotlin data class buni avtomatik qiladi, strukturaviy taqqoslash uchun == dan foydalanish imkonini beradi.
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // haqiqiy
toString metodi barcha xususiyatlarning nomlari va qiymatlari bilan obyektning o'qiladigan tavsifini qaytaradi. Bu Java bilan taqqoslaganda, standart bo'yicha o'n oltilik formatda hash-kod ko'rsatiladigan joyda, loglash va disk raskadrovka jarayonini sezilarli darajada soddalashtiradi.
Kotlin Documentation (2026) ma'lumotlariga ko'ra, toString data class format: “User(id=1, name=John, email=john@example.com)”. Primary constructor-dan xususiyatlar o'chirilganda toString avtomatik yangilanadi — desinxronizatsiya xavfi yo'q.
copy — data class ning asosiy imkoniyatlaridan biri. Belgilangan xususiyatlarning qiymatlarini o'zgartirish imkoniyati bilan obyektning yuzaki nusxasini yaratadi.
data class Order(
val id: Long,
val status: String,
val amount: Double
)
val order = Order(1L, "Pending", 299.99)
val updatedOrder = order.copy(status = "Confirmed")
// updatedOrder.id = 1L, amount = 299.99, status = “Confirmed”
copy funksional uslubda va o'zgarmaslik (immutability) arxitekturalarida ajralmas hisoblanadi. Mavjud obyektni mutatsiya qilish o'rniga o'zgartirilgan maydonlar bilan yangi nusxa yaratiladi, bu kodni yanada bashorat qilinadigan va ko'p oqimli stsenariylarda xavfsiz qiladi.
data class e'lon qilish tartibida har bir xususiyat uchun avtomatik ravishda component1, component2 va hokazo funksiyalarini yaratadi. Bu obyektni o'zgaruvchilarga destrukturizatsiya qilish imkonini beradi.
val user = User(1, "Alice", "alice@example.com")
val (id, name, email) = user
println("$id: $name ($email)") // “1: Alice (alice@example.com)”
Destrukturizatsiya lambdalarda va for-each sikllarida ham ishlaydi, bu data class-ni kollektsiyalar bilan ishlash uchun qulay qiladi.
Birinchi cheklov — data class boshqa data class dan meros ololmaydi. Faqat oddiy sinflardan yoki interfeyslardan meros olish mumkin.
Ikkinchi — avtomatik metodlar faqat primary constructor xususiyatlarini o'z ichiga oladi. Sinf tanasidagi xususiyatlar e'tiborga olinmaydi, bu esa buni unutganingizda noto'g'ri equals-ga olib kelishi mumkin.
Uchinchi — data class open, abstract, sealed yoki inner bo'la olmaydi. U har doim final.
To'rtinchi — data class ichidagi kollektsiyalar uchun copy yuzaki nusxalashni amalga oshiradi. Ko'chirilgan kollektsiya elementlarining o'zgarishi asl nusxaga ta'sir qiladi.
Kotlin Best Practices (2026) ma'lumotlariga ko'ra, data class DTO, API modellari, value objects va state obyektlari uchun optimal hisoblanadi. Biznes mantiqiga ega komponentlar uchun oddiy sinflardan foydalanish tavsiya etiladi.
Tez-tez so'raladigan savollar
Yo'q, data class boshqa data class dan meros ololmaydi. Biroq u oddiy sinfdan meros olishi yoki interfeyslarni amalga oshirishi mumkin.
Kamida bitta xususiyat. Maksimal son cheklanmagan, ammo destrukturizatsiya uchun componentN gacha yaratiladi.
Yo'q, avtomatik metodlar faqat primary constructor-dagi xususiyatlarni hisobga oladi. Sinf tanasidagi xususiyatlar equals, hashCode, toString va copy da ishtirok etmaydi.
Ha, siz data class tanasida equals, hashCode yoki toString ni override qilishingiz mumkin. Bu holda kompilyator o'z implementatsiyasini yaratmaydi.
data class avtomatik ravishda equals, hashCode, toString, copy va componentN ni yaratadi. Oddiy sinf qo'lda amalga oshirilmasdan bu metodlarni taqdim etmaydi.
Xulosa
Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz
IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.
Shuningdek o'qing