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 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.
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.
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.
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.
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 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.
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.
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.
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // doğru
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 — 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.
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.
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.
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.
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
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.
Minimum bir xassə. Maksimum say məhdud deyil, lakin destrükturizasiya üçün componentN-ə qədər yaradılır.
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.
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 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ə
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.
Həm də oxuyun