Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Android

Kotlin में var और val में क्या अंतर है?

परिचय

Kotlin में चर घोषित करने के लिए दो कीवर्ड हैं: var (परिवर्तनीय) और val (अपरिवर्तनीय)। यह अंतर सुरक्षित और पूर्वानुमेय कोड लिखने के लिए मौलिक है।

तुलना तालिका

विशेषताvarval
परिवर्तनीयतापरिवर्तनीय (Mutable)अपरिवर्तनीय (Immutable)
पुनः असाइनमेंटअनुमतअनुमत नहीं
जावा समकक्षसामान्य चरfinal चर
डिफ़ॉल्ट पसंदजब परिवर्तन आवश्यक होडिफ़ॉल्ट रूप से प्राथमिकता दें

उदाहरण 1: var - परिवर्तनीय चर

fun main() {
    var mutableName = "Kotlin"
    println("प्रारंभिक: $mutableName")
    
    // पुनः असाइनमेंट अनुमत है
    mutableName = "Kotlin Programming"
    println("बदला गया: $mutableName")
    
    // एकाधिक बार बदला जा सकता है
    mutableName = "Android Development"
    println("फिर बदला गया: $mutableName")
}

आउटपुट

प्रारंभिक: Kotlin
बदला गया: Kotlin Programming
फिर बदला गया: Android Development

उदाहरण 2: val - अपरिवर्तनीय चर

fun main() {
    val immutableName = "TutorialsPoint"
    println("मान: $immutableName")
    
    // यह कंपाइल त्रुटि देगा:
    // immutableName = "New Value"  // Error: Val cannot be reassigned
}

कंपाइल त्रुटि

Error: Val cannot be reassigned

महत्वपूर्ण अंतर: val ऑब्जेक्ट को अपरिवर्तनीय नहीं बनाता

fun main() {
    // val रेफरेंस अपरिवर्तनीय है, लेकिन ऑब्जेक्ट परिवर्तनीय हो सकता है
    val mutableList = mutableListOf("A", "B")
    println("पहले: $mutableList")
    
    // यह अनुमत है - लिस्ट की सामग्री बदल रही है, रेफरेंस नहीं
    mutableList.add("C")
    println("बाद में: $mutableList")
    
    // लेकिन यह अनुमत नहीं है:
    // mutableList = mutableListOf("D") // Error: Val cannot be reassigned
}

सर्वोत्तम अभ्यास

  1. डिफ़ॉल्ट रूप से val का उपयोग करें - अपरिवर्तनीयता बग कम करती है और कोड को तर्कसंगत बनाना आसान बनाती है
  2. केवल var का उपयोग करें जब आवश्यक हो - जब आपको वास्तव में रेफरेंस बदलने की आवश्यकता हो
  3. संग्रह के लिए: `val list = mutableListOf()` पसंद करें `var list = mutableListOf()` पर
  4. फंक्शनल शैली: `var` के बजाय परिवर्तन के बजाय रूपांतरण (`map`, `filter`) का उपयोग करें

उन्नत: lateinit और lazy के साथ

// lateinit - केवल var के साथ (बाद में इनिशियलाइज़ेशन)
class Example {
    lateinit var name: String  // non-null, बाद में इनिशियलाइज़ होगा
    
    // lazy - केवल val के साथ (थ्रेड-सेफ लेज़ी इनिशियलाइज़ेशन)
    val expensiveComputation: String by lazy {
        println("कंप्यूटिंग...")
        "परिणाम"
    }
}

निष्कर्ष

val डिफ़ॉल्ट विकल्प होना चाहिए। यह अपरिवर्तनीयता को लागू करता है, जिससे कोड अधिक सुरक्षित, थ्रेड-सेफ और समझने में आसान बनता है। केवल var का उपयोग करें जब आपके पास पुनः असाइनमेंट के लिए स्पष्ट कारण हो।

  1. डायरेक्टएक्स 11 और डायरेक्टएक्स 12 में क्या अंतर है? डायरेक्टएक्स 11 और डायरेक्टएक्स 12 में क्या अंतर है?

    डायरेक्टएक्स एपीआई का एक संग्रह है, या एप्लिकेशन प्रोग्रामिंग इंटरफेस, जिसका उपयोग सॉफ्टवेयर द्वारा मल्टीमीडिया सामग्री को रेंडर करने और ग्राफिकल हार्डवेयर के साथ संचार करने के लिए किया जाता है। डायरेक्टएक्स का प्रमुख घटक एपीआई, डायरेक्ट3डी, सॉफ्टवेयर और ग्राफिक्स हार्डवेयर के बीच संचार को संभालता ह

  1. - C# में VAR और DYNAMIC कीवर्ड के बीच अंतर क्या है?

    Dynamic dynamic कीवर्ड का उपयोग करके बनाए गए डायनामिक डेटा प्रकार वेरिएबल में किसी भी प्रकार का मान संग्रहीत करें। इन प्रकार के वेरिएबल के लिए टाइप चेकिंग रन-टाइम पर होती है। Dynamic डायनामिकली टाइप्ड वेरिएबल हैं। डायनामिक प्रकार घोषित करने का सिंटैक्स निम्न है: dynamic <variable_name> = value

  1. - C# में लिस्ट और डिक्शनरी में क्या अंतर है?

    List<T> और Dictionary<TKey, TValue> दोनों जेनेरिक कलेक्शन हैं लेकिन अलग-अलग उद्देश्यों के लिए उपयोग किए जाते हैं। List<T> - क्रमबद्ध संग्रह List myList = new List Maths Dictionary<TKey, TValue> - की-वैल्यू पेयर Dictionary d = new Dictionary 2 तुलना तालिका विशेषताList<T&