परिचय
Kotlin में ऐसे वेरिएबल जिनका मान प्रोग्राम में कभी नहीं बदलता, `const` कीवर्ड का उपयोग करके घोषित किए जाते हैं। ये कंपाइल-टाइम स्थिरांक होते हैं।
const के नियम
- शीर्ष-स्तर, `object`, या `companion object` में घोषित होना चाहिए
- केवल प्रिमिटिव टाइप्स और `String`
- मान कंपाइल-टाइम पर ज्ञात होना चाहिए (कोई फ़ंक्शन कॉल नहीं)
- कस्टम गेटर नहीं हो सकते
- अंतर्निहित रूप से `val` होते हैं
विधि 1: शीर्ष-स्तरीय स्थिरांक (सबसे सरल)
// फ़ाइल: Constants.kt
const val APP_NAME = "MyApplication"
const val MAX_RETRY = 3
const val API_BASE_URL = "https://api.example.com"
const val DEFAULT_TIMEOUT_MS = 5000L
fun main() {
println(APP_NAME)
println("अधिकतम पुनर्प्रयास: $MAX_RETRY")
}
आउटपुट
MyApplication अधिकतम पुनर्प्रयास: 3
विधि 2: Object Declaration में (नेमस्पेसिंग)
object AppConstants {
const val VERSION = "1.0.0"
const val BUILD_NUMBER = 42
const val IS_DEBUG = true
}
object NetworkConstants {
const val BASE_URL = "https://api.example.com"
const val TIMEOUT = 30_000
const val MAX_RETRIES = 3
}
fun main() {
println("v${AppConstants.VERSION} (${AppConstants.BUILD_NUMBER})")
println("API: ${NetworkConstants.BASE_URL}")
}
विधि 3: Companion Object में (क्लास-स्कोप्ड)
class User private constructor(val name: String) {
companion object {
const val ANONYMOUS_NAME = "Anonymous"
const val MIN_NAME_LENGTH = 3
const val MAX_NAME_LENGTH = 50
fun create(name: String): User = User(name.trim())
}
}
fun main() {
println(User.ANONYMOUS_NAME)
val user = User.create(" John ")
println(user.name)
}
विधि 4: एनोटेशन पैरामीटर्स के रूप में (केवल const val)
const val DEPRECATED_VERSION = "1.0"
@Deprecated("Use v2 API instead", ReplaceWith("apiV2()"))
@Target(AnnotationTarget.FUNCTION)
annotation class ApiVersion(val version: String)
// const val एनोटेशन में काम करता है
@ApiVersion(DEPRECATED_VERSION)
fun oldApi() {}
// val एनोटेशन में काम नहीं करेगा
// val runtimeVersion = "1.0"
// @ApiVersion(runtimeVersion) // कंपाइल त्रुटि
fun anotherApi() {}
const बनाम val - कब क्या उपयोग करें?
| परिदृश्य | उपयोग करें | उदाहरण |
|---|---|---|
| API कुंजी, कॉन्फ़िगरेशन मान | const val | `const val API_KEY = "..."` |
| एनोटेशन पैरामीटर्स | const val | `@Annotation(constVal)` |
| डेटाबेस कॉलम नाम | const val | `const val COL_ID = "id"` |
| रनटाइम पर गणना मान | val | `val hash = computeHash()` |
| ऑब्जेक्ट/संग्रह इंस्टेंस | val | `val list = listOf(1,2,3)` |
| लोकल वेरिएबल | val | `fun foo() { val x = 1 }` |
आंतरिक कार्यप्रणाली
// Kotlin कोड
const val CONST_EXAMPLE = "Hello"
// Java समकक्ष (बाइटकोड में):
// public static final String CONST_EXAMPLE = "Hello"; // फील्ड + स्थिरांक मान एम्बेडेड
// बनाम val:
val VAL_EXAMPLE = "World"
// Java समकक्ष:
// private static final String VAL_EXAMPLE = "World";
// public static String getVAL_EXAMPLE() { return VAL_EXAMPLE; } // गेटर
सर्वोत्तम अभ्यास
- शीर्ष-स्तर `const val` एप्लिकेशन-वाइड स्थिरांक के लिए
- Object declaration संबंधित स्थिरांकों के समूह के लिए (नेमस्पेसिंग)
- Companion object क्लास-विशिष्ट स्थिरांक के लिए
- नामकरण: `UPPER_SNAKE_CASE`
- `const val` का उपयोग करें जब भी संभव हो (प्रदर्शन, एनोटेशन संगतता)