Kotlin-də data class — bu nədir, sintaksis və data klasslarının xüsusiyyətləri

Müəllif: IT Sectr Dərc olunub: 2026-06-20 Oxuma vaxtı: 10 dəq

data class Kotlin-də yalnız məlumat saxlamaq üçün nəzərdə tutulmuş xüsusi sinif növüdür. Kompilyator primary constructor-da göstərilən xassələr əsasında avtomatik olaraq equals, hashCode, toString, copy və componentN metodlarını yaradır. JetBrains (2026) sənədlərinə görə, data class Java ekvivalentləri ilə müqayisədə şablon kodun həcmini 50–70% azaltmağa imkan verir və Kotlin layihələrində value-obyektlər üçün əsas təşkil edir.

Əsas məqamlar

  • data — Kotlin-də data sinifini elan etmək üçün açar söz
  • equals və hashCode — primary constructor-un bütün xassələri əsasında avtomatik yaradılır
  • copy — ayrı-ayrı sahələri əvəz etmək imkanı ilə səthi kopyalama funksiyası
  • componentN — data class-ın ayrıca dəyişənlərə destrükturizasiyası
  • Primary constructor ən azı bir val və ya var parametri ehtiva etməlidir

Kotlin-də data class nədir?

data class — əsas məqsədi məlumat saxlamaq olan siniflər üçün standart metodları avtomatik yaradan Kotlin sintaktik konstruksiyasıdır. Data class elan edilərkən kompilyator primary constructor-dakı bütün xassələr əsasında equals, hashCode, toString, copy və componentN tətbiqlərini yaradır.

Javada adi siniflərdən fərqli olaraq, tərtibatçı IDE və ya Lombok kimi kitabxanalar vasitəsilə getter, setter, equals, hashCode və toString-i əl ilə yazmalıdır, Kotlin isə daxili mexanizm təmin edir. Bu nəinki kodu qısaldır, həm də ardıcıllığı təmin edir — avtomatik metodlar həmişə xassələrin cari strukturuna uyğun gəlir.

JetBrains Kotlin Survey (2025) məlumatlarına görə, data class Kotlin layihələrinin 78%-də istifadə olunur ki, bu da onu dilin ən tələb olunan imkanlarından birinə çevirir. O, xüsusilə DTO, API cavab modelləri və MVVM-də state-obyektləri olan arxitekturalarda populyardır.

Sintaksis və əsas imkanlar

data class class qarşısında data açar sözü ilə elan edilir. Avtomatik metodlarda iştirak edən bütün xassələr primary constructor-da göstərilir.

kotlin
data class User(
    val id: Int,
    val name: String,
    val email: String
)

Bir sətir kod Javada onlarla sətir boilerplate əvəz edir. Kompilyator hər üç xassə üçün equals, hashCode, toString, copy və component1–component3 yaradır.

Primary constructor xaricindəki xassələr

Avtomatik metodlar yalnız primary constructor-dakı xassələri əhatə edir. Sinifin bədənində xassə elan etsəniz, o equals, hashCode, toString və copy-da iştirak etmir.

kotlin
data class Product(
    val id: Int,
    val title: String
) {
    var cachedPrice: Double = 0.0
    // cachedPrice equals/hashCode/copy-ya DAXİL DEYİL
}

Primary constructor məhdudiyyətləri

Primary constructor data class ən azı bir parametr ehtiva etməlidir. Bütün parametrlər val və ya var ilə işarələnməlidir. Data class üçün open, abstract, sealed və ya inner modifierlərindən istifadə etmək olmaz.

Avtomatik equals, hashCode və toString metodları

equals və hashCode primary constructor-dakı bütün xassələrin qiymətləri əsasında yaradılır. Data class-ın iki nümunəsi, əgər onların bütün müvafiq xassələri bərabərdirsə, bərabər sayılır.

Dəyər müqayisəsi üçün equals

Java-da obyektlərin standart müqayisəsi referans müqayisəsidir (==). Dəyər üzrə müqayisə üçün equals-in override edilməsi tələb olunur. Kotlin data class bunu avtomatik edir, struktur müqayisəsi üçün == istifadə etməyə imkan verir.

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

val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2)  // doğru

Debug üçün toString

toString metodu bütün xassələrin adları və qiymətləri ilə obyektin oxunaqlı təsvirini qaytarır. Bu, standart olaraq onaltılıq formatda hash-kod göstərilən Java ilə müqayisədə loglama və debug prosesini əhəmiyyətli dərəcədə asanlaşdırır.

Kotlin Documentation (2026) məlumatlarına görə, toString data class formatı: “User(id=1, name=John, email=john@example.com)”. Primary constructor-dan xassələr silindikdə toString avtomatik yenilənir — desinxronizasiya riski aradan qaldırılır.

Copy funksiyası və destrükturizasiya

copy — data class-ın əsas imkanlarından biridir. Göstərilən xassələrin qiymətlərini dəyişmək imkanı ilə obyektin səthi surətini yaradır.

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 üslubda və dəyişməzlik (immutability) arxitekturalarında əvəzolunmazdır. Mövcud obyekti mutasiya etmək əvəzinə dəyişdirilmiş sahələrlə yeni surət yaradılır ki, bu da kodu daha proqnozlaşdırılan və çoxiplikli ssenarilərdə təhlükəsiz edir.

componentN vasitəsilə destrükturizasiya

data class elan edilmə sırasına görə hər bir xassə üçün avtomatik olaraq component1, component2 və s. funksiyaları yaradır. Bu, obyekti dəyişənlərə destrükturizasiya etməyə imkan verir.

kotlin
val user = User(1, "Alice", "alice@example.com")
val (id, name, email) = user
println("$id: $name ($email)")  // “1: Alice (alice@example.com)”

Destrükturizasiya həmçinin lambdalarda və for-each dövrlərində işləyir ki, bu da data class-ı kolleksiyalarla işləmək üçün əlverişli edir.

Məhdudiyyətlər və tövsiyələr

Birinci məhdudiyyət — data class digər data class-dan miras ala bilməz. Yalnız adi siniflərdən və ya interfeyslərdən miras almaq mümkündür.

İkinci — avtomatik metodlar yalnız primary constructor xassələrini əhatə edir. Sinif bədənindəki xassələr nəzərə alınmır ki, bu da bunu unutduqda səhv equals-ə səbəb ola bilər.

Üçüncü — data class open, abstract, sealed və ya inner ola bilməz. O, həmişə final-dır.

Dördüncü — data class daxilindəki kolleksiyalar üçün copy səthi kopyalama aparır. Kopyalanmış kolleksiyanın elementlərinin dəyişdirilməsi orijinala təsir edəcək.

Kotlin Best Practices (2026) məlumatlarına görə, data class DTO, API modelləri, value objects və state obyektləri üçün optimaldır. Biznes məntiqi olan komponentlər üçün adi siniflərdən istifadə etmək tövsiyə olunur.

Tez-tez verilən suallar

Data class başqa data class-dan miras ala bilərmi?

Xeyr, data class başqa data class-dan miras ala bilməz. Lakin o, adi sinifdən miras ala və ya interfeysləri tətbiq edə bilər.

Primary constructor-da neçə xassə olmalıdır?

Minimum bir xassə. Maksimum say məhdud deyil, lakin destrükturizasiya üçün componentN-ə qədər yaradılır.

Sinif bədənindəki xassələr equals-ə daxil olurmu?

Xeyr, avtomatik metodlar yalnız primary constructor-dakı xassələri nəzərə alır. Sinif bədənindəki xassələr equals, hashCode, toString və copy-da iştirak etmir.

Avtomatik metodları əl ilə override etmək olarmı?

Bəli, siz data class-ın bədənində equals, hashCode və ya toString-i override edə bilərsiniz. Bu halda kompilyator öz tətbiqini yaratmır.

Data class adi sinifdən nə ilə fərqlənir?

data class avtomatik olaraq equals, hashCode, toString, copy və componentN yaradır. Adi sinif bu metodları əl ilə tətbiq etmədən təmin etmir.

Nəticə

  • data class — metodların avto-generasiyası ilə məlumat saxlamaq üçün Kotlin sintaktik konstruksiyası
  • equals və hashCode — primary constructor xassələri əsasında struktur müqayisəsi
  • toString — debug və loglama üçün obyektin oxunaqlı təsviri
  • copy — adlandırılmış arqumentlərlə ayrı-ayrı sahələri əvəz etməklə səthi kopyalama
  • componentN — kolleksiyalarla rahat iş üçün obyektlərin dəyişənlərə destrükturizasiyası
  • Məhdudiyyətlər — standart olaraq final, minimum bir xassə, data->data mirasının olmaması
  • Tətbiq — DTO, API modelləri, value objects, MVVM-də state

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun