Kotlin में Generics: शुरुआती लोगों के लिए क्यों ज़रूरी हैं और कैसे उपयोग करें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Kotlin में Generics का परिचय

\n\n

Kotlin में डेवलपमेंट करते समय, देर-सबेर आपको ऐसी स्थिति का सामना करना पड़ेगा जहाँ एक ही एल्गोरिदम या डेटा संरचना को विभिन्न प्रकार की वस्तुओं के साथ काम करना होगा। कल्पना करें कि आप किसी सूची में अधिकतम तत्व खोजने के लिए एक फ़ंक्शन लिख रहे हैं — इसे संख्याओं की सूची और स्ट्रिंग की सूची दोनों को समान रूप से अच्छी तरह से संभालना चाहिए। विशेष उपकरणों के बिना, आपको प्रत्येक प्रकार के लिए अलग-अलग कार्यान्वयन लिखने होंगे। यहीं पर Generics (जेनेरिक्स या सामान्यीकरण) मदद करते हैं।

\n\n

Kotlin में Generics एक शक्तिशाली तंत्र है जो आपको ऐसी क्लास, फ़ंक्शन और इंटरफ़ेस बनाने की अनुमति देता है जो विभिन्न डेटा प्रकारों के साथ काम करते हैं, साथ ही संकलन चरण में सख्त टाइपिंग बनाए रखते हैं। इस लेख में, हम समझेंगे कि Generics क्यों ज़रूरी हैं, और व्यावहारिक उदाहरणों के साथ उनका उपयोग करना सीखेंगे।

\n\n

Generics क्या हैं और इनकी आवश्यकता क्यों है?

\n\n

एक ऐसे बक्से की कल्पना करें जो किसी भी वस्तु को संग्रहीत कर सकता है: एक किताब, फ़ोन या सेब। प्रोग्रामिंग में, ऐसा "बक्सा" एक सामान्यीकृत क्लास या फ़ंक्शन है। Generics के बिना, आपको Any प्रकार (Java में Object के समान) का उपयोग करना होगा और लगातार टाइप कास्टिंग करनी होगी, जो त्रुटियों का कारण बन सकता है।

\n\n

Generics के बिना समस्या

\n\n
fun <T> printList(list: List<T>) {\n    for (item in list) {\n        println(item)\n    }\n}\n\n// Generics के बिना ऐसा लिखना होगा:\nfun printListAny(list: List<Any>) {\n    for (item in list) {\n        // प्रकार जाँच और कास्ट करने की आवश्यकता\n        if (item is String) {\n            println("स्ट्रिंग: $item")\n        } else if (item is Int) {\n            println("संख्या: $item")\n        }\n    }\n}
\n\n

Generics के उपयोग के लाभ

\n\n
    \n
  • प्रकार सुरक्षा — कंपाइलर संकलन चरण में प्रकारों के सही उपयोग की जाँच करता है।
  • \n
  • कोड का पुन: उपयोग — एक फ़ंक्शन या क्लास किसी भी प्रकार के साथ काम करता है।
  • \n
  • स्पष्ट कास्टिंग से मुक्ति — कोड साफ़ हो जाता है और त्रुटियों की संभावना कम हो जाती है।
  • \n
  • प्रदर्शन — रनटाइम पर प्रकार जाँच का कोई अतिरिक्त खर्च नहीं होता।
  • \n
\n\n

Kotlin में Generics की मुख्य संरचनाएँ

\n\n

1. Generic-फ़ंक्शन

\n\n

Generic-फ़ंक्शन एक ऐसा फ़ंक्शन है जो एक प्रकार पैरामीटर लेता है। इसे फ़ंक्शन के नाम से पहले कोण कोष्ठक <T> के साथ घोषित किया जाता है।

\n\n
fun <T> getFirstElement(list: List<T>): T? {\n    return list.firstOrNull()\n}\n\nfun main() {\n    val numbers = listOf(1, 2, 3, 4, 5)\n    val firstNumber = getFirstElement(numbers)\n    println("पहली संख्या: $firstNumber") // 1\n\n    val words = listOf("बिल्ली", "कुत्ता", "तोता")\n    val firstWord = getFirstElement(words)\n    println("पहला शब्द: $firstWord") // बिल्ली\n}
\n\n

ध्यान दें: प्रकार T कंपाइलर द्वारा स्वचालित रूप से निर्धारित किया जाता है। आप इसे स्पष्ट रूप से निर्दिष्ट कर सकते हैं, लेकिन यह आवश्यक नहीं है:

\n\n
val firstNumber = getFirstElement<Int>(numbers)
\n\n

2. Generic-क्लास

\n\n

Generic-क्लास एक ऐसी क्लास है जो किसी भी प्रकार की वस्तुओं को संग्रहीत और संसाधित कर सकती है। एक बेहतरीन उदाहरण मानक Box क्लास है।

\n\n
class Box<T>(private val content: T) {\n    fun getContent(): T {\n        return content\n    }\n\n    fun isTypeOf(typeClass: Class<*>): Boolean {\n        return typeClass.isInstance(content)\n    }\n}\n\nfun main() {\n    val stringBox = Box("नमस्ते, दुनिया!")\n    println(stringBox.getContent()) // नमस्ते, दुनिया!\n\n    val intBox = Box(42)\n    println(intBox.getContent()) // 42\n\n    // प्रकार की जाँच\n    println(intBox.isTypeOf(Int::class.java)) // true\n}
\n\n

3. Generic-इंटरफ़ेस

\n\n

इंटरफ़ेस भी सामान्यीकृत हो सकते हैं। यह विशेष रूप से कलेक्शन या डेटा प्रोसेसिंग के लिए कॉन्ट्रैक्ट बनाते समय उपयोगी होता है।

\n\n
interface Repository<T> {\n                

ब्लॉग

पुस्तक अनुशंसाएँ