मैं डिफाल्ट द्वारा शुरू करूँगा जो कि Scala में def , val और var के बीच मौजूद है ।
def - दाईं ओर की सामग्री के लिए एक अपरिवर्तनीय लेबल को परिभाषित करता है जिसे आलसी रूप से मूल्यांकन किया जाता है - नाम से मूल्यांकन।
वैल - सही पक्ष की सामग्री के लिए एक अपरिवर्तनीय लेबल को परिभाषित करता है जो कि उत्सुकता से / तुरंत मूल्यांकन किया जाता है - मूल्य द्वारा मूल्यांकन किया जाता है।
var - एक परिवर्तनशील चर को परिभाषित करता है , शुरू में मूल्यांकन किए गए राइट साइड कंटेंट पर सेट होता है।
उदाहरण, def
scala> def something = 2 + 3 * 4
something: Int
scala> something // now it's evaluated, lazily upon usage
res30: Int = 14
उदाहरण, वैल
scala> val somethingelse = 2 + 3 * 5 // it's evaluated, eagerly upon definition
somethingelse: Int = 17
उदाहरण, var
scala> var aVariable = 2 * 3
aVariable: Int = 6
scala> aVariable = 5
aVariable: Int = 5
ऊपर के अनुसार, डीईएफ और वैल से लेबल को पुन: असाइन नहीं किया जा सकता है, और किसी भी प्रयास के मामले में नीचे की तरह एक त्रुटि होगी:
scala> something = 5 * 6
<console>:8: error: value something_= is not a member of object $iw
something = 5 * 6
^
जब वर्ग को परिभाषित किया जाता है:
scala> class Person(val name: String, var age: Int)
defined class Person
और फिर के साथ त्वरित:
scala> def personA = new Person("Tim", 25)
personA: Person
व्यक्ति के उस विशिष्ट उदाहरण (अर्थात 'व्यक्तित्व') के लिए एक अपरिवर्तनीय लेबल बनाया जाता है। जब भी परिवर्तनशील क्षेत्र 'आयु' को संशोधित करने की आवश्यकता होती है, तो ऐसा प्रयास विफल हो जाता है:
scala> personA.age = 44
personA.age: Int = 25
जैसी कि उम्मीद थी, 'उम्र' एक गैर-परस्पर लेबल का हिस्सा है। इस पर काम करने का सही तरीका एक परिवर्तनशील चर का उपयोग करना है, जैसे निम्नलिखित उदाहरण में:
scala> var personB = new Person("Matt", 36)
personB: Person = Person@59cd11fe
scala> personB.age = 44
personB.age: Int = 44 // value re-assigned, as expected
स्पष्ट रूप से, परिवर्तनशील परिवर्तनीय संदर्भ (अर्थात 'personB') से वर्ग उत्परिवर्तित क्षेत्र 'आयु' को संशोधित करना संभव है।
मैं अब भी इस तथ्य पर जोर दूंगा कि उपर्युक्त अंतर से सब कुछ आता है, किसी भी स्काला प्रोग्रामर के दिमाग में स्पष्ट होना चाहिए।
val
बदला जा सकता है, लेकिन एक घाटी द्वारा निर्दिष्ट वस्तु नहीं हो सकती है। Aval
स्थिर नहीं है।