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 प्रोजेक्ट्स में value-ऑब्जेक्ट्स का आधार है।

मुख्य बिंदु

  • 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 जैसी लाइब्रेरीज़ का उपयोग करके मैन्युअल रूप से गेटर्स, सेटर्स, 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
}

प्राथमिक कंस्ट्रक्टर की सीमाएं

प्राथमिक कंस्ट्रक्टर में कम से कम एक पैरामीटर होना चाहिए। सभी पैरामीटर 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 कार्यात्मक शैली और अपरिवर्तनीयता वाली आर्किटेक्चर में अपरिहार्य है। मौजूदा ऑब्जेक्ट को बदलने के बजाय, संशोधित फ़ील्ड के साथ एक नई प्रतिलिपि बनाई जाती है, जो कोड को अधिक अनुमानित और मल्टीथ्रेडेड परिदृश्यों में सुरक्षित बनाता है।

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 मॉडल, value objects और स्थिति ऑब्जेक्ट्स के लिए इष्टतम है। व्यावसायिक तर्क वाले घटकों के लिए सामान्य वर्गों का उपयोग करने की अनुशंसा की जाती है।

अक्सर पूछे जाने वाले प्रश्न

क्या 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 मॉडल, value objects, MVVM में स्थिति

हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे

IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें