Kotlin List में add नहीं है? गुम हुए मेथड्स की खोज

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

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

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

Kotlin ने हमसे add, remove और put क्यों "छीन" लिए? आइए हमेशा के लिए समझ लें

\n\n

अगर आपने कभी Java में कोड लिखा है और फिर Kotlin पर स्विच किया है, तो आपने शायद इस हैरान करने वाले पल का अनुभव किया होगा। आप एक List बनाते हैं, उसमें एक एलिमेंट जोड़ना चाहते हैं — आप .add() लिखते हैं, और डेवलपमेंट एनवायरनमेंट इसे लाल रंग में हाइलाइट कर देता है। या फिर आप Map में .put() के ज़रिए वैल्यू डालने की कोशिश करते हैं — और फिर से एरर आती है।

\n\n

परिचित लग रहा है? बिल्कुल! Stack Overflow पर सवाल "Kotlin's List missing "add", "remove", Map missing "put", etc?" ने हज़ारों व्यूज़ और दर्जनों कमेंट्स जुटाए हैं। यह शुरुआती लोगों के लिए एक बड़ी रुकावट है, और अनुभवी डेवलपर्स भी कभी-कभी सोचते हैं: "मेरे पुराने तरीके कहाँ गए?"

\n\n

इस लेख में हम सिर्फ इस सवाल का जवाब नहीं देंगे। हम दिखाएंगे कि कैसे Kotlin का दर्शन इस "कमी" को आपके लिए एक बड़ा फायदा बनाता है। आप 2025 में कलेक्शन के साथ काम करने के बेस्ट प्रैक्टिसेज सीखेंगे, सही कलेक्शन टाइप चुनना सीखेंगे, और listOf और mutableListOf के बीच भ्रम से बचेंगे। चलिए शुरू करते हैं!

\n\n

असली बात क्या है? अपरिवर्तनीयता (Immutability) एक जीवनशैली के रूप में

\n\n

सबसे पहले समझने वाली बात: Kotlin को शुरू से ही एक ऐसी भाषा के रूप में डिज़ाइन किया गया था जो सुरक्षित और अनुमानित कोड को प्रोत्साहित करती है। मुख्य सिद्धांतों में से एक है — डिफ़ॉल्ट रूप से अपरिवर्तनीयता (immutability)।

\n\n

Java में, आपके पास एक इंटरफ़ेस List है, और इसमें हमेशा add(), remove(), set() जैसे मेथड्स होते हैं। भले ही आप List.of() (Java 9+) के ज़रिए लिस्ट बनाएं, फिर भी आपके पास इन मेथड्स तक पहुँच होती है — वे सिर्फ रनटाइम पर एक्सेप्शन फेंकते हैं। यह असुविधाजनक और असुरक्षित है।

\n\n

Kotlin ने एक अलग रास्ता अपनाया। इसने कलेक्शन को दो प्रकारों में बांट दिया:

\n\n
    \n
  • अपरिवर्तनीय (read-only): List, Set, Map — इनमें कंटेंट बदलने वाले मेथड्स नहीं होते।
  • \n
  • परिवर्तनीय (mutable): MutableList, MutableSet, MutableMap — इनमें वे सभी परिचित add, remove, put मेथड्स होते हैं।
  • \n
\n\n

यही कारण है कि listOf(1, 2, 3) में .add() मेथड नहीं है। यह एक अपरिवर्तनीय लिस्ट लौटाता है। जबकि mutableListOf(1, 2, 3) एक परिवर्तनीय लिस्ट लौटाता है, और इसमें .add() मौजूद है।

\n\n

तार्किक लग रहा है? आइए कोड पर नज़र डालते हैं।

\n\n

उदाहरण: क्या काम करता है और क्या नहीं

\n\n

यहाँ एक क्लासिक स्थिति है जो शुरुआती लोगों को भ्रमित करती है:

\n\n
// ❌ एरर! List में add() नहीं है\nval fruits = listOf("apple", "banana")\nfruits.add("orange") // कंपाइल एरर\n\n// ✅ सही तरीका: MutableList का उपयोग करें\nval mutableFruits = mutableListOf("apple", "banana")\nmutableFruits.add("orange") // अब काम करता है!\nprintln(mutableFruits) // [apple, banana, orange]\n
\n\n

Map के साथ भी यही कहानी है:

\n\n
// ❌ एरर! Map में put() नहीं है\nval capitals = mapOf("Russia" to "Moscow", "France" to "Paris")\ncapitals.put("Germany", "Berlin") // कंपाइल एरर\n\n// ✅ सही तरीका: MutableMap का उपयोग करें\nval mutableCapitals = mutableMapOf("Russia" to "Moscow", "France" to "Paris")\nmutableCapitals.put("Germany", "Berlin")\n// या और छोटा तरीका:\nmutableCapitals["Germany"] = "Berlin"\nprintln(mutableCapitals) // {Russia=Moscow, France=Paris, Germany=Berlin}\n
\n\n

ध्यान दें: MutableMap के लिए आप ऑपरेटर ब्रैकेट [] का उपयोग कर सकते हैं — यह असल में put() का ही एक रूप है। बहुत सुविधाजनक!

\n\n

लेकिन क्यों? Kotlin जीवन को इतना जटिल क्यों बना रहा है?

\n\n

पहली नज़र में, यह एक अनावश्यक सिरदर्द लगता है। दो प्रकार के कलेक्शन क्यों याद रखें? असल में, यह एक शानदार समाधान है। यहाँ तीन मुख्य कारण हैं:

\n\n

1. टाइप स्तर पर सुरक्षा

\n

कंपाइलर अब यह सुनिश्चित करता है कि आप गलती से उस लिस्ट को न बदलें जिसे बदला नहीं जाना चाहिए।

ब्लॉग

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