Kotlin const vs val: अंतर और सही विकल्प कैसे चुनें?

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

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

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

Kotlin const vs val: अंतर और सही विकल्प कैसे चुनें?

\n\n

आप Kotlin में कोड लिख रहे हैं और अचानक सोचते हैं: "आखिर const और val में क्या फर्क है? दोनों तो अपरिवर्तनीय (immutable) लगते हैं?" बहुत अच्छा सवाल! यह बात Java या दूसरी भाषाओं से आने वाले अनुभवी डेवलपर्स को भी कन्फ्यूज कर देती है। कोई आश्चर्य नहीं कि Stack Overflow पर "What is the difference between 'const' and 'val'?" टॉपिक को हज़ारों व्यूज़ मिलते हैं। आज हम इस सवाल का हमेशा के लिए समाधान करेंगे, थ्योरी को आसानी से समझेंगे और लाइव कोड उदाहरणों के साथ इसे पक्का करेंगे।

\n\n

तैयार हैं? चलिए शुरू करते हैं!

\n\n

संक्षिप्त परिचय: val क्या है?

\n\n

सबसे आसान चीज़ से शुरू करते हैं। val (value यानी मान से) एक अपरिवर्तनीय रेफरेंस है। आप इसे एक बार मान असाइन कर सकते हैं और फिर कभी नहीं बदल सकते। परिचित लगता है? हाँ, यह Java के final या C# के readonly जैसा है।

\n\n
val name: String = "आलिया"\nname = "रोहन" // कंपाइल करने पर एरर! Val cannot be reassigned
\n\n

लेकिन एक अहम बात: val सिर्फ यह गारंटी देता है कि रेफरेंस नहीं बदलेगा, लेकिन ऑब्जेक्ट की अंदरूनी स्थिति बदल सकती है। अगर आप val का उपयोग mutableList के साथ करते हैं, तो आप अब भी एलिमेंट जोड़ और हटा सकते हैं।

\n\n
val numbers = mutableListOf(1, 2, 3)\nnumbers.add(4) // यह काम करेगा!\n// numbers = mutableListOf(5, 6) // एरर! रेफरेंस को रीअसाइन नहीं कर सकते
\n\n

val को डिक्लेरेशन के समय या बाद में कोड में (जैसे कंस्ट्रक्टर या init ब्लॉक में) इनिशियलाइज़ किया जा सकता है। इसका मान प्रोग्राम रनटाइम के दौरान कैलकुलेट होता है।

\n\n

const क्या है? कंपाइल टाइम का सख्त संरक्षक

\n\n

const, val का अधिक सख्त भाई है। यह भी अपरिवर्तनीय है, लेकिन इसमें एक खास क्षमता है: इसका मान कंपाइल टाइम पर ही पता होना चाहिए। दूसरे शब्दों में, यह एक असली कॉन्स्टेंट है जिसे कंपाइलर सीधे कोड में इनलाइन कर सकता है।

\n\n

const के सख्त नियम हैं:

\n
    \n
  • इसे केवल फ़ाइल लेवल पर (क्लास के बाहर) या object / companion object के अंदर डिक्लेयर किया जा सकता है।
  • \n
  • यह प्रिमिटिव टाइप या String टाइप का होना चाहिए।
  • \n
  • यह किसी फंक्शन कॉल या कैलकुलेशन का रिजल्ट नहीं हो सकता - केवल लिटरल या दूसरा कॉन्स्टेंट हो सकता है।
  • \n
\n\n
// सही\nconst val PI = 3.14159\nconst val APP_NAME = "MyApp"\n\n// गलत\nconst val currentTime = System.currentTimeMillis() // एरर! कंपाइल टाइम पर मान ज्ञात नहीं\nconst val userName = getName() // एरर! फंक्शन कॉल की अनुमति नहीं
\n\n

मुख्य अंतर: const vs val तालिका में

\n\n

स्पष्टता के लिए, यहाँ एक तुलनात्मक तालिका है:

\n\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
मापदंडconst valval
इनिशियलाइज़ेशन का समयकंपाइल टाइम पररनटाइम पर
कहाँ डिक्लेयर कर सकते हैंटॉप-लेवल, object, companion objectकहीं भी (क्लास, फंक्शन, कंस्ट्रक्टर के अंदर)
डेटा टाइपकेवल प्रिमिटिव और Stringकोई भी टाइप (ऑब्जेक्ट, लिस्ट सहित)
परफॉरमेंसअधिकतम (इनलाइनिंग)सामान्य
एनोटेशन में उपयोगहाँनहीं
\n\n

प्रैक्टिकल उदाहरण: एनोटेशन और परफॉरमेंस

\n\n

सबसे महत्वपूर्ण उपयोगों में से एक

ब्लॉग

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