कोटलिन में वैल और वार


289

बीच क्या अंतर है varऔर valKotlin में?

मैं इस लिंक से गुजरा हूँ:

https://kotlinlang.org/docs/reference/properties.html

जैसा कि इस लिंक पर बताया गया है:

रीड-ओनली प्रॉपर्टी डिक्लेरेशन का पूरा सिंटैक्स एक परस्पर दो तरीकों से भिन्न होता है: यह var के बजाय वैल से शुरू होता है और एक सेटर की अनुमति नहीं देता है।

लेकिन इससे पहले कि एक उदाहरण है जो एक सेटर का उपयोग करता है।

fun copyAddress(address: Address): Address {
    val result = Address() // there's no 'new' keyword in Kotlin
    result.name = address.name // accessors are called
    result.street = address.street
    // ...
    return result
}

varऔर के बीच सटीक अंतर क्या है val?

हमें दोनों की आवश्यकता क्यों है?

यह वह जगह है डुप्लिकेट नहीं की Kotlin में चर, जावा के साथ मतभेद। var बनाम वैल? जैसा कि मैं प्रलेखन में विशेष उदाहरण से संबंधित संदेह के बारे में पूछ रहा हूं और न केवल सामान्य रूप से।


4
resultके एक अलग उदाहरण को संदर्भित करने के लिए नहीं बदला जा सकता है Address, लेकिन जिस उदाहरण को संदर्भित करता है उसे अभी भी संशोधित किया जा सकता है। जावा में यह सच होगा यदि आपके पासfinal Address result = new Address();
माइकल


उत्तर के लिए यहाँ आया क्योंकि कोटलिन वेबसाइट जो पहले चरों का वर्णन करती है, वहाँ इसका उल्लेख करने के लिए बहुत गूंगा था: kotlinlang.org/docs/reference/basic-syntax.html
AndroidDev

जवाबों:


239

आपके कोड resultमें परिवर्तन नहीं हो रहा है, इसके varगुण बदल रहे हैं। नीचे टिप्पणी देखें:

fun copyAddress(address: Address): Address {
    val result = Address() // result is read only
    result.name = address.name // but not their properties.
    result.street = address.street
    // ...
    return result
}

valfinalजावा में संशोधक के समान है । जैसा कि आपको शायद पता होना चाहिए कि हम एक finalचर को फिर से असाइन नहीं कर सकते हैं लेकिन इसके गुणों को बदल सकते हैं।


1
फ़ंक्शन और कक्षाओं में या प्राथमिक निर्माता में वैल और var का अलग अर्थ है?

3
@ नोइंग नो, हर जगह वही।
chandil03

लेकिन जब मैं वर्ग में वैरिएबल के साथ वैरिएबल की घोषणा करता हूं तो उसे इनिशियलाइजेशन की आवश्यकता होती है क्योंकि यह प्रॉपर्टी घोषित करता है। लेकिन फ़ंक्शन में इसे आरंभीकरण की आवश्यकता क्यों नहीं है?

क्योंकि जब क्लास मेमोरी में लोड होती है, तो इसके गुणों का मूल्यांकन भी हो जाता है। लेकिन फ़ंक्शन चर का मूल्यांकन तब किया जाता है जब फ़ंक्शन कोड निष्पादित होता है।
चाण्डिल ०३

फ़ंक्शन के अंदर या कक्षा के अंदर इसका मतलब दोनों कीवर्ड valऔर varगुणों को घोषित करने के लिए उपयोग किया जाता है? परिवर्तनशील नहीं?

142

valऔर varदोनों को एक चर घोषित करने के लिए उपयोग किया जाता है।

var सामान्य चर की तरह है और इसे कोटलिन में एक परिवर्तनशील चर के रूप में जाना जाता है और इसे कई बार सौंपा जा सकता है।

वैल फाइनल वेरिएबल की तरह है और इसे कोटलिन में अपरिवर्तनीय के रूप में जाना जाता है और इसे केवल एक ही बार में इनिशियलाइज़ किया जा सकता है।

अधिक जानकारी है क्या के लिए valऔर varलिंक नीचे देखें कृपया

http://blog.danlew.net/2017/05/30/mutable-vals-in-kotlin/


23

वेरिएबल के साथ परिभाषित परिवर्तनशील हैं (पढ़ें और लिखें)

घाटी से परिभाषित चर अपरिवर्तनीय हैं (केवल पढ़ें)

Kotlin findViewById को हटा सकते हैं और एंड्रॉइड स्टूडियो में setOnClickListener के लिए कोड कम कर सकते हैं। पूर्ण संदर्भ के लिए: कोटलिन भयानक विशेषताएं

परिवर्तनशील चरों का मान कभी भी बदला जा सकता है, जबकि आप अपरिवर्तनीय चरों का मान नहीं बदल सकते।

मुझे कहाँ var और कहाँ val का उपयोग करना चाहिए?

var का उपयोग करें जहाँ मान बार-बार बदल रहा है। उदाहरण के लिए, Android डिवाइस का स्थान प्राप्त करते समय

var integerVariable : Int? = null

वैल का उपयोग करें जहां पूरे वर्ग में मूल्य में कोई बदलाव नहीं हुआ है। उदाहरण के लिए आप टेक्स्टव्यू या बटन के टेक्स्ट को प्रोग्रामेटिक रूप से सेट करना चाहते हैं।

val stringVariables : String = "Button's Constant or final Text"

17
"Kotlin findViewById को हटा सकते हैं और एंड्रॉइड स्टूडियो में setOnClickListener के लिए कोड कम कर सकते हैं। पूर्ण संदर्भ के लिए: Kotlin भयानक विशेषताएं" यह पूछे गए प्रश्न के लिए कैसे प्रासंगिक है?
डेनवरकोडर

4
वैल चर जरूरी अपरिवर्तनीय नहीं हैं। वे अंतिम हैं - केवल संदर्भ अपरिवर्तनीय है - लेकिन अगर घाटी में संग्रहित वस्तु परस्पर है, तो वस्तु परस्पर भिन्न है चाहे वह वैल या वेर के माध्यम से सौंपी गई हो।
ट्रैविस

मुझे दो नए कीवर्ड शुरू करने की बात नहीं
दिखती है

18

valअंतिम चर घोषित करने के लिए उपयोग करें। valचर के लक्षण

  1. आरंभिक होना चाहिए
  2. मान को बदला नहीं जा सकता या पुन: असाइन नहीं किया जा सकता है यहां छवि विवरण दर्ज करें

var एक सामान्य चर के रूप में है

  1. हम बाद में lateinitसंशोधक का उपयोग करके आरंभ कर सकते हैं

    [ lateinitवैश्विक वैरिएबल के लिए भी उपयोग करें हम इसे स्थानीय चर के लिए उपयोग नहीं कर सकते]

  2. मूल्य बदला जा सकता है या पुन: असाइन किया जा सकता है लेकिन वैश्विक दायरे में नहीं

यहां छवि विवरण दर्ज करें

valमें कीवर्ड kotlinकी तरह finalहै java


12

बस, var (म्यूटेबल) और वैल (जावा (अंतिम संशोधक) जैसे अपरिवर्तनीय मूल्य)

var x:Int=3
x *= x

//gives compilation error (val cannot be re-assigned)
val y: Int = 6
y*=y



11
+----------------+-----------------------------+---------------------------+
|                |             val             |            var            |
+----------------+-----------------------------+---------------------------+
| Reference type | Immutable(once initialized  | Mutable(can able to change|
|                | can't be reassigned)        | value)                    |
+----------------+-----------------------------+---------------------------+
| Example        | val n = 20                  | var n = 20                |
+----------------+-----------------------------+---------------------------+
| In Java        | final int n = 20;           | int n = 20;               |
+----------------+-----------------------------+---------------------------+

संदर्भ


8

आप इसे आसानी से समझ सकते हैं:

var सेटर के लिए उपयोग किया जाता है (मूल्य बदल जाएगा)।

val गेटर के लिए प्रयोग किया जाता है (केवल पढ़ने के लिए, मूल्य नहीं बदलेगा)।


8

यदि हम चर का उपयोग करने की घोषणा करते हैं valतो यह केवल पढ़ने योग्य चर होगा। हम इसे बदल नहीं सकते इसका मूल्य है। यह जावा के अंतिम चर की तरह है । यह है ।immutable

लेकिन अगर हम वेरिएबल का उपयोग करने की घोषणा करते हैं varतो यह एक वैरिएबल होगा जिसे हम पढ़ या लिख सकते हैं । हम बदल सकते हैं यह मूल्य है। यह है mutable

data class Name(val firstName: String, var lastName: String)

fun printName(name: Name): Name {
    val myName = Name("Avijit", "Karmakar") // myName variable is read only
    // firstName variable is read-only. 
    //You will get a compile time error. Val cannot be reassigned.
    myName.firstName = myName.firstName
    // lastName variable can be read and write as it's a var.
    myName.lastName = myName.lastName
    return myName
}

valकीवर्ड द्वारा हाल ही में प्रारंभ नहीं किया जा सकता है, lateinitलेकिन गैर-आदिम varको कीवर्ड द्वारा हाल ही में आरंभ किया जा सकता है lateinit


फ़ंक्शन और कक्षाओं में या प्राथमिक निर्माता में वैल और var का अलग अर्थ है?

8

मूल रूप से

  • var= परिवर्तनशील , इसलिए यह बदल सकता है
  • val= मान , इसलिए यह बदल नहीं सकता।

8

कोटलिन valमें केवल पढ़ने के लिए संपत्ति है और इसे केवल एक गटर द्वारा पहुँचा जा सकता है। valअपरिवर्तनीय है।

val उदाहरण :

val piNumber: Double = 3.1415926
    get() = field

हालाँकि, varयह एक पढ़ने-लिखने की संपत्ति है, इसलिए इसे न केवल एक गेट्टर बल्कि एक सेटर द्वारा भी एक्सेस किया जा सकता है। varपारस्परिक है।

var उदाहरण :

var gravity: Double = 9.8
    get() = field
    set(value) { 
        field = value 
    }    

यदि आप एक अपरिवर्तनीय को बदलने की कोशिश करते हैं val, तो IDE आपको त्रुटि दिखाएगा:

fun main() {    
    piNumber = 3.14          // ERROR
    println(piNumber)
}

// RESULT:   Val cannot be reassigned 

लेकिन एक परिवर्तनशील varबदला जा सकता है:

fun main() {    
    gravity = 0.0
    println(gravity)
}

// RESULT:   0.0

उम्मीद है की यह मदद करेगा।


4

वैल संपत्ति जावा में अंतिम संपत्ति के समान है। आपको इसे केवल एक समय के लिए मान देने की अनुमति है। जब आप दूसरी बार मान के साथ इसे पुन: असाइन करने का प्रयास करते हैं तो आपको संकलन त्रुटि मिलेगी। जबकि var प्रॉपर्टी म्यूटेबल होती है, जिसे आप अपनी इच्छानुसार और जब चाहें किसी भी समय के लिए इसे फिर से असाइन करने के लिए स्वतंत्र होते हैं।


4

क्या आपको एक चर को बदलने या इसे स्थायी रूप से सेट करने की आवश्यकता है?

  • एक अच्छा उदाहरण है अगर यह वैली पाई 5 प्लेसेस = 3.14159 जैसा कुछ है तो आप इसे इस प्रकार सेट करेंगे val। क्या कोई संभावना है कि आपको उस चर को अभी या बाद में बदलने की आवश्यकता है, फिर आप इसे var के रूप में सेट करेंगे।

  • उदाहरण के लिए: एक कार का रंग, हो सकता है var colorCar = green। बाद में आप इसे बदल सकते हैं colorCar = blue, जहां एक के रूप में val, आप नहीं कर सकते।

  • यहाँ के संबंध में mutableऔर immutableठीक है, लेकिन अगर ये शब्द अच्छी तरह से ज्ञात नहीं हैं या सिर्फ प्रोग्राम करने के तरीके सीखने में हो रहे हैं तो डरावना हो सकता है।


3

valचर का मान केवल एक बार सौंपा जा सकता है।

val address = Address("Bangalore","India")
address = Address("Delhi","India") // Error, Reassigning is not possible with val

यद्यपि आप मूल्य को पुन: सौंप नहीं सकते हैं लेकिन आप निश्चित रूप से वस्तु के गुणों को संशोधित कर सकते हैं।

//Given that city and country are not val
address.setCity("Delhi") 
address.setCountry("India")

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

वैरिएबल के मान को आप जितनी बार चाहें उतनी बार पुन: असाइन किया जा सकता है।

var address = Address("Bangalore","India")
address = Address("Delhi","India") // No Error , Reassigning possible.

स्पष्ट रूप से, यह अंतर्निहित गुणों को तब तक बदला जा सकता है जब तक कि उन्हें वैध घोषित नहीं किया जाता है।

//Given that city and country are not val
address.setCity("Delhi")
address.setCountry("India")

3

KOTLIN VAL और VAR में चर बनाने के दो तरीके

1. वैल निरंतर मूल्यों को संग्रहीत करता है। जिसे फाइनल वेरिएबल भी कहा जाता है

2. VAR परिवर्तनशील मूल्यों को संग्रहीत करता है

उदाहरण के लिए यहां क्लिक करें


2

valconstantपरिवर्तनशील की तरह , स्वयं को बदला नहीं जा सकता, केवल पढ़ा जा सकता है, लेकिन कैन के गुणों को valसंशोधित किया जा सकता है; varअन्य प्रोग्रामिंग भाषाओं में उत्परिवर्ती चर की तरह।


2

वैल अपरिवर्तनीय है, अंतिम, पहला असाइन किया गया मान नहीं बदला जा सकता है।

val name:String = "andy"

name = "thomas" //Error: Val cannot be reassigned

var उत्परिवर्तनीय है, आश्वस्त है, आप मान को बार-बार बदल सकते हैं।

val a:Int = 1
var b:Int = 1
println("${a + b}") // output 2

b = 4
println("${a + b}") // output 5

मुझे लगता है कि इसे याद रखने का सबसे आसान तरीका:

वैल = चर फाइनल

var = चर reassignable, या val के विपरीत।


प्रश्न दो के बीच अंतर के बारे में है, न कि कैसे अंतर करने के लिए बॉट। कृपया नीचे दिए गए लिंक पर जाएं जो आपको अच्छे उत्तर पोस्ट करने में मदद करेगा stackoverflow.com/help/how-to-answer
प्रसून करुणान V

तो आप उसी उत्तर को पसंद करते हैं, भले ही बहुत से लोग इसका जवाब दे रहे हों। और कुछ लोगों के लिए कोटलिन, वैल और var के समान नए हैं। इसलिए आपको उन्हें इस बात का उदाहरण देने की जरूरत है कि इसे कैसे अलग किया जाए और वे क्या हैं। लेकिन हां, मैं आपकी सलाह लूंगा। धन्यवाद।
वाहू अंगारा राया

1

दोनों, valऔर varचर (स्थानीय और वर्ग के गुण) घोषित करने के लिए इस्तेमाल किया जा सकता है।

स्थानीय चर :

  1. valकेवल पढ़ने योग्य चर घोषित करता है जिन्हें केवल एक बार सौंपा जा सकता है, लेकिन उन्हें पुन: असाइन नहीं किया जा सकता है

उदाहरण:

val readonlyString = “hello”
readonlyString = “c u” // Not allowed for `val`
  1. varजैसा कि आप उन्हें जावा से जानते हैं, पुन: संकेत योग्य चर घोषित करता है (कीवर्ड जावा 10 में पेश किया जाएगा, "स्थानीय चर प्रकार इंजेक्शन )। "

उदाहरण:

var reasignableString = “hello”
reasignableString = “c u” // OK

यह हमेशा उपयोग करने के लिए बेहतर है valvarजितनी बार संभव हो बचने की कोशिश करें !

वर्ग गुण :

कक्षाओं के अंदर गुणों को परिभाषित करने के लिए भी दोनों कीवर्ड का उपयोग किया जाता है । एक उदाहरण के रूप में, निम्नलिखित पर एक नज़र डालें data class:

data class Person (val name: String, var age: Int)

Personजिनमें से एक केवल पढ़ने के लिए है दो क्षेत्रों, शामिल हैं ( name)। ageदूसरी ओर, वर्ग इन्स्टेन्शियशन के बाद, के माध्यम से प्रदान पुनर्निर्दिष्ट किया जा सकता setter। ध्यान दें कि nameएक समान सेटर विधि नहीं होगी।


1

दोनों चर का उपयोग प्रारंभिक के रूप में किया जाता है

  • एक स्थिर चर की तरह वैल, यह पठनीय हो सकता है, और एक वैल के गुणों को संशोधित किया जा सकता है।

  • केवल एक परिवर्तनशील चर की तरह var। आप किसी भी समय मूल्य बदल सकते हैं।


1

संक्षेप में, वैल चर अंतिम (परिवर्तनशील नहीं) या स्थिर मान है कि भविष्य और में परिवर्तित नहीं किया जाएगा है वर चर (परिवर्तनशील) भविष्य में बदला जा सकता है।

class DeliveryOrderEvent(val d : Delivery)
// Only getter

उपरोक्त कोड देखें। यह एक मॉडल वर्ग है, जिसका उपयोग डेटा पासिंग के लिए किया जाएगा। मैंने वैरिएबल से पहले वैल सेट किया है क्योंकि यह वैरिएबल डेटा प्राप्त करने के लिए उपयोग किया गया था।

class DeliveryOrderEvent(var d : Delivery)

// setter and getter is fine here. No error

इसके अलावा, यदि आपको डेटा सेट करने की आवश्यकता है , तो आपको चर से पहले var कीवर्ड का उपयोग करने की आवश्यकता है , यदि आपको केवल एक बार मान प्राप्त करने की आवश्यकता है, तो वेल कीवर्ड का उपयोग करें


1

साधारण

  • Valstaticजावा जैसे क्षेत्र के लिए उपयोग कर रहा हैStatic Keyword

  • जैसे Staticजावा में / वैसे ही कोटलिन में

  • और Varकोटलिन में चर क्षेत्र को दर्शाता है कि, आप इसे बदल सकते हैं।

  • Staticजब आप एक बार में स्थिर मेमोरी में मूल्य बचाना चाहते हैं, तो अधिकतर उपयोग किया जाता है,

उदाहरण:

 if you assign

 val a=1
 a=3  You can not change it 
  • आप बदल नहीं सकते हैं, यह अंतिम मूल्य और स्टेटिक है

    var b=2

    b=4 यू इसे बदल सकते हैं


1

वैल: ऐड या इनिशियलाइज्ड वैल्यू लेकिन बदलना नहीं चाहिए। var: यह वैरिएबल है जो कोड में किसी भी लाइन में परिवर्तन कर सकता है।


1

कोटलिन में हम चर को दो प्रकारों में घोषित कर सकते हैं: valऔर varvalपुन: असाइन नहीं किया जा सकता है, यह अंतिम चर के रूप में काम करता है।

val x = 2
x=3 // cannot be reassigned

दूसरी तरफ, var को पुन: असाइन किया जा सकता है यह परिवर्तनशील है

var x = 2
x=3 // can be reassigned

0

दोनों परिवर्तनशील हैं केवल अंतर है परिवर्तनीय चर और अपरिवर्तनीय चर और अधिक अंतर नहीं है। var म्यूटेबल वैरिएबल और वैल अपरिवर्तनीय है। सिंपल लैंग्वेज वर्जन में बदलाव हो सकता है इनिशियलाइज़ेशन वैल्यू के स्थिर होने के बाद वैल्यू है और वैल्यू को इनिशियलाइज़ करने के बाद इसे वैल्यू में नहीं बदल सकते।


0

val(मूल्य से): अपरिवर्तनीय संदर्भ। एक वैरिएबल के साथ घोषित एक चर को valफिर से शुरू करने के बाद पुन: असाइन नहीं किया जा सकता है। यह finalजावा में एक चर से मेल खाती है ।

var(चर से): परस्पर संदर्भ। इस तरह के एक चर के मूल्य को बदला जा सकता है। यह घोषणा एक नियमित (गैर-अंतिम) जावा चर से मेल खाती है।


0

Var का मतलब है Variable- यदि आप किसी भी ऑब्जेक्ट को 'var' का उपयोग करके संग्रहीत करते हैं तो यह समय में बदल सकता है।

उदाहरण के लिए:

fun main(args: Array<String>) {
    var a=12
    var b=13
    var c=12
    a=c+b **//new object 25**
    print(a)
}

वैल साधन मूल्य -यह एक तरह 'निरंतर' जावा में हैं.यदि आप 'वैल' यह समय में नहीं बदल सके का उपयोग कर किसी भी वस्तु संग्रहीत।

उदाहरण के लिए:

fun main(args: Array<String>) {
    val a=12
    var b=13
    var c=12
    a=c+b **//You can't assign like that.it's an error.**
    print(a)
}

0

VAR का उपयोग उन चर को बनाने के लिए किया जाता है, जिनका मूल्य आपके एप्लिकेशन में समय के साथ बदल जाएगा। यह VAR के समान है


0

वैल - अपरिवर्तनीय (एक बार आरंभीकृत नहीं किया जा सकता है)

var - म्यूटेबल (मूल्य बदलने में सक्षम)

उदाहरण

कोटलिन में - Val n = 20 और var n = 20

जावा में - अंतिम इंट एन = 20; & इंट एन = 20;


0

var एक परिवर्तनशील चर है और इसे कई बार असाइन किया जा सकता है और val अपरिवर्तनीय चर है और इसे केवल एक बार ही पहचाना जा सकता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.