Kotlin میں data class — یہ کیا ہے، نحو اور ڈیٹا کلاسز کی خصوصیات

مصنف: IT Sectr اشاعت: 2026-06-20 مطالعے کا وقت: 10 منٹ

data class Kotlin میں ایک خاص قسم کی کلاس ہے جو خصوصی طور پر ڈیٹا ذخیرہ کرنے کے لیے ڈیزائن کی گئی ہے۔ کمپائلر پرائمری کنسٹرکٹر میں متعین کردہ خصوصیات کی بنیاد پر خود بخود equals، hashCode، toString، copy اور componentN طریقے تیار کرتا ہے۔ JetBrains دستاویزات (2026) کے مطابق، data class Java کے مساوی کے مقابلے میں بوائلرپلیٹ کوڈ کی مقدار کو 50–70% تک کم کرنے کی اجازت دیتا ہے اور Kotlin پروجیکٹس میں قدری اشیاء کی بنیاد ہے۔

اہم نکات

  • data — Kotlin میں ڈیٹا کلاس اعلان کرنے کے لیے کلیدی لفظ
  • equals اور hashCode — پرائمری کنسٹرکٹر کی تمام خصوصیات کی بنیاد پر خود بخود تیار ہوتے ہیں
  • copy — انفرادی فیلڈز کو تبدیل کرنے کی صلاحیت کے ساتھ سطحی کاپی فنکشن
  • componentN — data class کو علیحدہ متغیرات میں تحلیل کرنا
  • پرائمری کنسٹرکٹر میں کم از کم ایک val یا var پیرامیٹر ہونا چاہیے

Kotlin میں data class کیا ہے؟

data class Kotlin کا ایک نحوی تعمیر ہے جو خود بخود ان کلاسز کے لیے معیاری طریقے تیار کرتا ہے جن کا بنیادی مقصد ڈیٹا ذخیرہ کرنا ہے۔ data class کا اعلان کرتے وقت، کمپائلر پرائمری کنسٹرکٹر کی تمام خصوصیات کی بنیاد پر equals، hashCode، toString، copy اور componentN کے نفاذات تخلیق کرتا ہے۔

Java میں عام کلاسز کے برعکس، جہاں ڈویلپر کو IDE یا Lombok جیسی لائبریریوں کا استعمال کرتے ہوئے دستی طور پر getter، setter، equals، hashCode اور toString لکھنا پڑتا ہے، Kotlin ایک بلٹ ان میکانزم فراہم کرتا ہے۔ یہ نہ صرف کوڈ کو کم کرتا ہے بلکہ مستقل مزاجی بھی یقینی بناتا ہے — خودکار طریقے ہمیشہ موجودہ خصوصیت کی ساخت کے مطابق ہوتے ہیں۔

JetBrains Kotlin سروے (2025) کے مطابق، data class 78% Kotlin پروجیکٹس میں استعمال ہوتا ہے، جو اسے زبان کی سب سے زیادہ مانگی جانے والی خصوصیات میں سے ایک بناتا ہے۔ یہ خاص طور پر DTO، API ردعمل کے ماڈلز اور MVVM میں حالت کی اشیاء والے فن تعمیرات میں مقبول ہے۔

نحو اور بنیادی صلاحیتیں

data class کو class سے پہلے data کلیدی لفظ کے ساتھ اعلان کیا جاتا ہے۔ خودکار طریقوں میں حصہ لینے والی تمام خصوصیات پرائمری کنسٹرکٹر میں متعین کی جاتی ہیں۔

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

کوڈ کی ایک لائن Java میں درجنوں بوائلرپلیٹ لائنوں کی جگہ لے لیتی ہے۔ کمپائلر تینوں خصوصیات کے لیے equals، hashCode، toString، copy اور component1–component3 تیار کرتا ہے۔

پرائمری کنسٹرکٹر سے باہر کی خصوصیات

خودکار طریقوں میں صرف پرائمری کنسٹرکٹر کی خصوصیات شامل ہوتی ہیں۔ اگر کلاس کے جسم میں کوئی خصوصیت اعلان کی جاتی ہے، تو وہ equals، hashCode، toString اور copy میں حصہ نہیں لیتی۔

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

پرائمری کنسٹرکٹر کی حدود

data class کے پرائمری کنسٹرکٹر میں کم از کم ایک پیرامیٹر ہونا چاہیے۔ تمام پیرامیٹرز کو val یا var کے طور پر نشان زد کیا جانا چاہیے۔ data class کے لیے open، abstract، sealed یا inner موڈیفائر استعمال نہیں کیے جا سکتے۔

خودکار طریقے equals، hashCode اور toString

equals اور hashCode پرائمری کنسٹرکٹر کی تمام خصوصیات کی قدروں کی بنیاد پر تیار ہوتے ہیں۔ data class کی دو مثالیں برابر سمجھی جاتی ہیں اگر ان کی تمام مطابقت پذیر خصوصیات برابر ہوں۔

قدری موازنہ کے لیے equals

Java میں، ڈیفالٹ آبجیکٹ موازنہ حوالہ جاتی موازنہ (==) ہے۔ قدری موازنہ کے لیے equals کو اوور رائڈ کرنے کی ضرورت ہے۔ Kotlin data class خود بخود یہ کرتا ہے، ساختی موازنہ کے لیے == کے استعمال کی اجازت دیتا ہے۔

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

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

ڈیبگنگ کے لیے toString

toString طریقہ تمام خصوصیات کے ناموں اور قدروں کے ساتھ آبجیکٹ کی ایک پڑھنے کے قابل نمائندگی لوٹاتا ہے۔ یہ Java کے مقابلے میں لاگنگ اور ڈیبگنگ کو نمایاں طور پر آسان بناتا ہے، جہاں ڈیفالٹ آؤٹ پٹ ہیکساڈیسیمل فارمیٹ میں ہیش کوڈ دکھاتا ہے۔

Kotlin دستاویزات (2026) کے مطابق، data class کے toString کا فارمیٹ “User(id=1, name=John, email=john@example.com)” ہے۔ پرائمری کنسٹرکٹر سے خصوصیات ہٹاتے وقت، toString خود بخود اپ ڈیٹ ہو جاتا ہے — ڈی سنکرونائزیشن کا خطرہ ختم ہو جاتا ہے۔

copy فنکشن اور تحلیل

copy data class کی اہم خصوصیات میں سے ایک ہے۔ یہ مخصوص خصوصیات کی قدروں کو تبدیل کرنے کی صلاحیت کے ساتھ آبجیکٹ کی ایک سطحی کاپی تخلیق کرتا ہے۔

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 فنکشنل اسٹائل اور ناقابل تغیر (immutability) والے فن تعمیرات میں ناگزیر ہے۔ موجودہ آبجیکٹ کو تبدیل کرنے کے بجائے، تبدیل شدہ فیلڈز کے ساتھ ایک نئی کاپی تخلیق کی جاتی ہے، جو کوڈ کو زیادہ پیش قیاسی اور ملٹی تھریڈڈ منظرناموں میں محفوظ بناتا ہے۔

componentN کے ذریعے تحلیل

data class خود بخود اعلان کی ترتیب میں ہر خصوصیت کے لیے component1، component2 وغیرہ فنکشن تیار کرتا ہے۔ یہ آبجیکٹ کو متغیرات میں تحلیل کرنے کی اجازت دیتا ہے۔

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

تحلیل لیمبڈا اور for-each لوپس میں بھی کام کرتا ہے، جو data class کو مجموعات کے ساتھ کام کرنے کے لیے آسان بناتا ہے۔

حدود اور سفارشات

پہلی حد — data class کسی دوسرے data class سے وراثت کی حمایت نہیں کرتا۔ صرف عام کلاسز یا انٹرفیس سے وراثت حاصل کی جا سکتی ہے۔

دوسری — خودکار طریقوں میں صرف پرائمری کنسٹرکٹر کی خصوصیات شامل ہوتی ہیں۔ کلاس کے جسم کی خصوصیات کو نظر انداز کیا جاتا ہے، جو اگر آپ اسے بھول جائیں تو غلط equals کا سبب بن سکتا ہے۔

تیسری — data class open، abstract، sealed یا inner نہیں ہو سکتا۔ یہ ہمیشہ final ہوتا ہے۔

چوتھی — data class کے اندر مجموعات کے لیے، copy سطحی کاپی کرتا ہے۔ کاپی شدہ مجموعہ کے اندر عناصر کو تبدیل کرنا اصل کو متاثر کرے گا۔

Kotlin بہترین طریقوں (2026) کے مطابق، data class DTO، API ماڈلز، قدری اشیاء اور حالت کی اشیاء کے لیے بہترین ہے۔ کاروباری منطق والے اجزاء کے لیے عام کلاسز استعمال کرنے کی سفارش کی جاتی ہے۔

اکثر پوچھے گئے سوالات

کیا data class کسی دوسرے data class سے وراثت حاصل کر سکتا ہے؟

نہیں، data class کسی دوسرے data class سے وراثت حاصل نہیں کر سکتا۔ تاہم، یہ کسی عام کلاس سے وراثت حاصل کر سکتا ہے یا انٹرفیس کو نافذ کر سکتا ہے۔

پرائمری کنسٹرکٹر میں کتنی خصوصیات ہونی چاہئیں؟

کم از کم ایک خصوصیت۔ زیادہ سے زیادہ تعداد محدود نہیں ہے، لیکن تحلیل کے لیے componentN تیار ہوتا ہے۔

کیا کلاس کے جسم کی خصوصیات equals میں شامل ہوتی ہیں؟

نہیں، خودکار طریقے صرف پرائمری کنسٹرکٹر کی خصوصیات پر غور کرتے ہیں۔ کلاس کے جسم کی خصوصیات equals، hashCode، toString اور copy میں حصہ نہیں لیتیں۔

کیا میں خودکار طریقوں کو دستی طور پر اوور رائڈ کر سکتا ہوں؟

ہاں، آپ data class کے جسم میں equals، hashCode یا toString کو اوور رائڈ کر سکتے ہیں۔ اس صورت میں، کمپائلر اپنا نفاذ تیار نہیں کرتا۔

data class عام کلاس سے کیسے مختلف ہے؟

data class خود بخود equals، hashCode، toString، copy اور componentN تیار کرتا ہے۔ عام کلاس دستی نفاذ کے بغیر یہ طریقے فراہم نہیں کرتی۔

خلاصہ

  • data class — خودکار طور پر تیار کردہ طریقوں کے ساتھ ڈیٹا ذخیرہ کرنے کے لیے Kotlin نحوی تعمیر
  • equals اور hashCode — پرائمری کنسٹرکٹر کی خصوصیات پر مبنی ساختی موازنہ
  • toString — ڈیبگنگ اور لاگنگ کے لیے آبجیکٹ کی پڑھنے کے قابل نمائندگی
  • copy — نامزد دلائل کے ذریعے انفرادی فیلڈز کی تبدیلی کے ساتھ سطحی کاپی
  • componentN — مجموعات کے ساتھ آسان کام کے لیے اشیاء کا متغیرات میں تحلیل
  • حدود — ڈیفالٹ طور پر final، کم از کم ایک خصوصیت، data->data وراثت نہیں
  • استعمال — DTO، API ماڈلز، قدری اشیاء، MVVM میں حالت

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں