Kotlin-da data class — bu nima, sintaksis va data klasslarining xususiyatlari

Muallif: IT Sectr Nashr etilgan: 2026-06-20 O'qish vaqti: 10 daq

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 — Kotlin-da data klassini e'lon qilish uchun kalit so'z
  • equals va hashCode — primary constructor-ning barcha xususiyatlari asosida avtomatik yaratiladi
  • copy — alohida maydonlarni almashtirish imkoniyati bilan yuzaki nusxalash funksiyasi
  • componentN — data class-ni alohida o'zgaruvchilarga destrukturizatsiyasi
  • Primary constructor kamida bitta val yoki var parametrni o'z ichiga olishi kerak

Kotlin-da data class nima?

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.

Sintaksis va asosiy imkoniyatlar

data class class oldida data kalit so'zi bilan e'lon qilinadi. Avtomatik metodlarda ishtirok etadigan barcha xususiyatlar primary constructor-da ko'rsatiladi.

kotlin
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.

Primary constructor-dan tashqari xususiyatlar

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.

kotlin
data class Product(
    val id: Int,
    val title: String
) {
    var cachedPrice: Double = 0.0
    // cachedPrice equals/hashCode/copy ga KIRITILMAGAN
}

Primary constructor cheklovlari

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.

Avtomatik equals, hashCode va toString metodlari

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.

Qiymatni taqqoslash uchun equals

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.

kotlin
data class Address(
    val city: String,
    val street: String
)

val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2)  // haqiqiy

Debug uchun toString

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 funksiyasi va destrukturizatsiya

copy — data class ning asosiy imkoniyatlaridan biri. Belgilangan xususiyatlarning qiymatlarini o'zgartirish imkoniyati bilan obyektning yuzaki nusxasini yaratadi.

kotlin
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.

componentN orqali destrukturizatsiya

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.

kotlin
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.

Cheklovlar va tavsiyalar

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

Data class boshqa data class dan meros olishi mumkinmi?

Yo'q, data class boshqa data class dan meros ololmaydi. Biroq u oddiy sinfdan meros olishi yoki interfeyslarni amalga oshirishi mumkin.

Primary constructor da nechta xususiyat bo'lishi kerak?

Kamida bitta xususiyat. Maksimal son cheklanmagan, ammo destrukturizatsiya uchun componentN gacha yaratiladi.

Sinf tanasidagi xususiyatlar equals ga kiradimi?

Yo'q, avtomatik metodlar faqat primary constructor-dagi xususiyatlarni hisobga oladi. Sinf tanasidagi xususiyatlar equals, hashCode, toString va copy da ishtirok etmaydi.

Avtomatik metodlarni qo'lda override qilish mumkinmi?

Ha, siz data class tanasida equals, hashCode yoki toString ni override qilishingiz mumkin. Bu holda kompilyator o'z implementatsiyasini yaratmaydi.

Data class oddiy sinfdan qanday farq qiladi?

data class avtomatik ravishda equals, hashCode, toString, copy va componentN ni yaratadi. Oddiy sinf qo'lda amalga oshirilmasdan bu metodlarni taqdim etmaydi.

Xulosa

  • data class — metodlarni avtomatik yaratish bilan ma'lumotlarni saqlash uchun Kotlin sintaktik konstruksiyasi
  • equals va hashCode — primary constructor xususiyatlari asosida strukturaviy taqqoslash
  • toString — disk raskadrovka va loglash uchun obyektning o'qiladigan tavsifi
  • copy — nomlangan argumentlar bilan alohida maydonlarni almashtirish orqali yuzaki nusxalash
  • componentN — kollektsiyalar bilan qulay ishlash uchun obyektlarni o'zgaruvchilarga destrukturizatsiyasi
  • Cheklovlar — standart bo'yicha final, kamida bitta xususiyat, data->data merosining yo'qligi
  • Qo'llanilishi — DTO, API modellari, value objects, MVVM-dagi state

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.

Loyihani muhokama qilish

Shuningdek o'qing