data class Kotlin में एक विशेष प्रकार का वर्ग है जो विशेष रूप से डेटा संग्रहीत करने के लिए डिज़ाइन किया गया है। कंपाइलर प्राथमिक कंस्ट्रक्टर में निर्दिष्ट गुणों के आधार पर स्वचालित रूप से equals, hashCode, toString, copy और componentN विधियाँ उत्पन्न करता है। JetBrains दस्तावेज़ीकरण (2026) के अनुसार, data class Java समकक्षों की तुलना में बॉयलरप्लेट कोड की मात्रा 50–70% तक कम करने की अनुमति देता है और Kotlin प्रोजेक्ट्स में value-ऑब्जेक्ट्स का आधार है।
मुख्य बिंदु
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 कीवर्ड के साथ घोषित किया जाता है। स्वचालित विधियों में भाग लेने वाले सभी गुण प्राथमिक कंस्ट्रक्टर में निर्दिष्ट होते हैं।
data class User(
val id: Int,
val name: String,
val email: String
)
कोड की एक पंक्ति Java में दर्जनों बॉयलरप्लेट पंक्तियों को बदल देती है। कंपाइलर तीनों गुणों के लिए equals, hashCode, toString, copy और component1–component3 उत्पन्न करता है।
स्वचालित विधियों में केवल प्राथमिक कंस्ट्रक्टर के गुण शामिल होते हैं। यदि कोई गुण वर्ग के मुख्य भाग में घोषित किया जाता है, तो वह equals, hashCode, toString और copy में भाग नहीं लेता।
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 प्राथमिक कंस्ट्रक्टर के सभी गुणों के मानों के आधार पर उत्पन्न होते हैं। data class के दो उदाहरण समान माने जाते हैं यदि उनके सभी संगत गुण समान हों।
Java में, डिफ़ॉल्ट रूप से ऑब्जेक्ट तुलना संदर्भ तुलना (==) है। मान तुलना के लिए equals को ओवरराइड करना आवश्यक है। Kotlin data class इसे स्वचालित रूप से करता है, जिससे संरचनात्मक तुलना के लिए == का उपयोग किया जा सकता है।
data class Address(
val city: String,
val street: String
)
val a1 = Address("Moscow", "Tverskaya")
val a2 = Address("Moscow", "Tverskaya")
println(a1 == a2) // true
toString विधि सभी गुणों के नाम और मानों के साथ ऑब्जेक्ट का पठनीय प्रतिनिधित्व लौटाती है। यह Java की तुलना में लॉगिंग और डीबगिंग को काफी सरल बनाता है, जहाँ डिफ़ॉल्ट आउटपुट हेक्साडेसिमल प्रारूप में हैश कोड दिखाता है।
Kotlin दस्तावेज़ीकरण (2026) के अनुसार, data class के toString का प्रारूप है: “User(id=1, name=John, email=john@example.com)”। प्राथमिक कंस्ट्रक्टर से गुण हटाने पर, toString स्वचालित रूप से अपडेट हो जाता है — डीसिंक्रनाइज़ेशन का जोखिम समाप्त हो जाता है।
copy data class की प्रमुख विशेषताओं में से एक है। यह निर्दिष्ट गुणों के मान बदलने की क्षमता के साथ ऑब्जेक्ट की शैलो कॉपी बनाता है।
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 कार्यात्मक शैली और अपरिवर्तनीयता वाली आर्किटेक्चर में अपरिहार्य है। मौजूदा ऑब्जेक्ट को बदलने के बजाय, संशोधित फ़ील्ड के साथ एक नई प्रतिलिपि बनाई जाती है, जो कोड को अधिक अनुमानित और मल्टीथ्रेडेड परिदृश्यों में सुरक्षित बनाता है।
data class स्वचालित रूप से प्रत्येक गुण के लिए उनकी घोषणा के क्रम में component1, component2 इत्यादि फ़ंक्शन उत्पन्न करता है। यह ऑब्जेक्ट को चरों में डिस्ट्रक्चर करने की अनुमति देता है।
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 से इनहेरिट नहीं कर सकता। हालाँकि, यह एक सामान्य वर्ग से इनहेरिट कर सकता है या इंटरफ़ेस लागू कर सकता है।
कम से कम एक गुण। अधिकतम संख्या सीमित नहीं है, लेकिन डिस्ट्रक्चरिंग के लिए componentN उत्पन्न होता है।
नहीं, स्वचालित विधियाँ केवल प्राथमिक कंस्ट्रक्टर के गुणों पर विचार करती हैं। वर्ग के मुख्य भाग के गुण equals, hashCode, toString और copy में भाग नहीं लेते।
हाँ, आप data class के मुख्य भाग में equals, hashCode या toString को ओवरराइड कर सकते हैं। इस स्थिति में, कंपाइलर अपना स्वयं का कार्यान्वयन उत्पन्न नहीं करता।
data class स्वचालित रूप से equals, hashCode, toString, copy और componentN उत्पन्न करता है। सामान्य वर्ग मैन्युअल कार्यान्वयन के बिना ये विधियाँ प्रदान नहीं करता।
सारांश
हम एक मोबाइल एप्लिकेशन टर्नकी विकसित करेंगे
IT Sectr 2017 से स्टार्टअप और व्यवसायों के लिए iOS और Android एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।
यह भी पढ़ें