Kotlin में Constants: सही तरीका जानें | पूरी गाइड

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

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

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

Kotlin में Constants: अब अनुमान न लगाएं, सही तरीका अपनाएं

\n\n

अगर आप Kotlin में कम से कम एक हफ्ते से कोड लिख रहे हैं, तो आपने शायद यह सवाल पूछा होगा: "कॉन्स्टेंट को सही तरीके से कैसे डिक्लेयर करें?" लगता है सब कुछ आसान है — val है, const val है, companion object है। लेकिन असल में, बारीकियों में ही फर्क छिपा है। Stack Overflow पर इस सवाल के हज़ारों व्यूज़ हैं, और यह कोई संयोग नहीं है।

\n\n

चलिए, एक बार और हमेशा के लिए समझ लेते हैं कि Kotlin में कॉन्स्टेंट बनाने के कौन से तरीके हैं, कब किसका उपयोग करना चाहिए, और क्यों val हमेशा कॉन्स्टेंट नहीं होता। शुरू करते हैं!

\n\n

1. val vs const val: असल अंतर क्या है?

\n\n

शुरुआती लोगों का सबसे आम सवाल: "मैंने val लिखा — क्या यह कॉन्स्टेंट है?" जवाब: हाँ और नहीं दोनों।

\n\n

val एक अपरिवर्तनीय रेफरेंस (read-only) है। लेकिन इसकी वैल्यू रनटाइम पर कैलकुलेट होती है। यानी यह कम्पाइल-टाइम कॉन्स्टेंट नहीं है।

\n\n
// यह कम्पाइल-टाइम कॉन्स्टेंट नहीं है\nval currentTime = System.currentTimeMillis()
\n\n

const val एक असली कॉन्स्टेंट है, जो कम्पाइल होने पर सीधे कोड में एम्बेड हो जाता है (Java के static final की तरह)।

\n\n
// और यह है असली कॉन्स्टेंट\nconst val PI = 3.14159
\n\n

महत्वपूर्ण सीमा: const val का उपयोग केवल प्रिमिटिव टाइप और String के साथ ही किया जा सकता है। ऑब्जेक्ट, लिस्ट या कस्टम क्लास के साथ नहीं।

\n\n
\n

💡 सुनहरा नियम: अगर वैल्यू कम्पाइल-टाइम पर पता है — const val का उपयोग करें। अगर रनटाइम पर कैलकुलेट होती है — val का उपयोग करें।

\n
\n\n

2. कॉन्स्टेंट कहाँ डिक्लेयर करें? टॉप-3 तरीके

\n\n

तरीका 1: Top-level कॉन्स्टेंट (सुझाया गया)

\n\n

सबसे आसान और साफ तरीका — फ़ाइल के टॉप-लेवल पर कॉन्स्टेंट डिक्लेयर करना। कोई क्लास नहीं, कोई ऑब्जेक्ट नहीं — बस एक फ़ाइल जिसमें कॉन्स्टेंट हों।

\n\n
// Constants.kt\nconst val BASE_URL = "https://api.example.com"\nconst val TIMEOUT_SECONDS = 30\nconst val APP_NAME = "MyKotlinApp"
\n\n

यह क्यों बढ़िया है?

\n
    \n
  • कम से कम कोड
  • \n
  • बिना प्रीफिक्स के हर जगह उपलब्ध
  • \n
  • कम्पाइलर वैल्यू को एम्बेड करता है
  • \n
  • रीफैक्टर करना आसान
  • \n
\n\n

तरीका 2: क्लास के अंदर companion object

\n\n

Java का क्लासिक तरीका, जो Kotlin में आया है। जब कॉन्स्टेंट किसी क्लास से तार्किक रूप से जुड़े हों, तब इसका उपयोग करें।

\n\n
class NetworkClient {\n    companion object {\n        const val DEFAULT_PORT = 8080\n        const val PROTOCOL = "https"\n    }\n}\n\n// उपयोग\nval port = NetworkClient.DEFAULT_PORT
\n\n

नुकसान: सिंटैक्स में अतिरिक्त शोर। फायदा: कॉन्स्टेंट कॉन्टेक्स्ट से बंधे होते हैं।

\n\n

तरीका 3: object (सिंगलटन) कॉन्स्टेंट के समूह के लिए

\n\n

जब बहुत सारे कॉन्स्टेंट हों और उन्हें अर्थ के अनुसार समूहित करना हो।

\n\n
object AppConstants {\n    const val MAX_LOGIN_ATTEMPTS = 5\n    const val SESSION_DURATION = 3600L\n    const val DATE_FORMAT = "yyyy-MM-dd"\n\n    object Urls {\n        const val LOGIN = "/auth/login"\n        const val LOGOUT = "/auth/logout"\n    }\n}\n\n// उपयोग\nAppConstants.Urls.LOGIN
\n\n

3. Android में कॉन्स्टेंट: खास बातें

\n\n

अगर आप Android के लिए कोड लिख रहे हैं, तो कुछ अतिरिक्त बारीकियाँ हैं।

\n\n

companion object में कॉन्स्टेंट और @JvmStatic

\n\n

companion object के कॉन्स्टेंट को Java में असली स्टैटिक बनाने के लिए (जैसे एनोटेशन के लिए), @JvmStatic का उपयोग करें:

\n\n
class MyFragment : Fragment() {\n    companion object {\n        @JvmStatic\n        const val ARG_ID = "id"\n    }\n}
\n\n

रिसोर्सेज़ में कॉन्स्टेंट

\n\n

Android का क्लासिक तरीका न भूलें — रिसोर्सेज़। स्ट्रिंग, रंग, साइज़ के लिए:

\n\n
// strings.xml\n<string name="app_name">MyApp</string>\n\n// कोड में\nval appName = getString(R.string.app_name)
\n\n

लेकिन ये कम्पाइल-टाइम कॉन्स्टेंट नहीं हैं।

ब्लॉग

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