“Const” और “val” में क्या अंतर है?


276

मैंने हाल ही में constकीवर्ड के बारे में पढ़ा है , और मैं बहुत उलझन में हूँ! मुझे constऔर valकीवर्ड के बीच कोई अंतर नहीं मिल रहा है, मेरा मतलब है कि हम दोनों को एक अपरिवर्तनीय चर बनाने के लिए उपयोग कर सकते हैं, क्या कुछ और है जो मुझे याद आ रही है?



आप इस लेख को पढ़ सकते हैं android4dev.com/difference-between-var-val-and-const-in-kotlin या इस वीडियो को देखें youtube.com/watch?v=DQLrEGqSSI8&t=6s
लोकेश देसानी

जवाबों:


388

consts संकलित समय स्थिरांक हैं। मतलब कि उनका मूल्य संकलित समय के दौरान सौंपा जाना चाहिए, valएस के विपरीत , जहां यह रनटाइम पर किया जा सकता है।

इसका मतलब यह है, कि constकभी भी एक फ़ंक्शन या किसी भी क्लास कंस्ट्रक्टर को नहीं सौंपा जा सकता है, लेकिन केवल एक Stringया आदिम को।

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

const val foo = complexFunctionCall()   //Not okay
val fooVal = complexFunctionCall()  //Okay

const val bar = "Hello world"           //Also okay

3
इस तरह से कुछ के बारे में क्या: const val foo = "Hello world"और val bar = "Hello world"? क्या यह वही है?
मैथ्यू हनी

5
@ मैथ्यू हनी, कम से कम बायोटेक के संदर्भ में नहीं, देखें: stackoverflow.com/questions/37482378/static-data-in-kotlin/…
hotkey

4
मुझे लगता है constकि संकलन के दौरान मूल्यों को पूरी तरह से रेखांकित किया जाएगा।
लूका जैकबोवित्ज

102
यह एक और सवाल है: कोटलिन const valको सिर्फ इसके बजाय की आवश्यकता क्यों है const? मुझे लगता है कि यह valशब्द इस संदर्भ में पूरी तरह से अतिश्योक्तिपूर्ण है, क्योंकि const varयह उसके चेहरे पर बेतुका होगा।
एरिक लॉयड

18
साथ @EricLloyd const val, constएक संशोधक है valएक कीवर्ड के बजाय। संशोधक> कीवर्ड। यह एक ही डिजाइन के अधिक उदाहरण हैं, annotation/enum/data class, private val, inline funआदि,
एआरओ

38

बस लुका के जवाब में जोड़ने के लिए:

कम्पाइल-टाइम कांस्टेंट

गुण जिन्हें संकलित समय पर जाना जाता है, उन्हें मूल्य संशोधक के रूप में संकलित समय स्थिरांक के रूप में चिह्नित किया जा सकता है। ऐसे गुणों को निम्नलिखित आवश्यकताओं को पूरा करने की आवश्यकता है:

इस तरह के गुणों का उपयोग एनोटेशन में किया जा सकता है।

स्रोत: आधिकारिक दस्तावेज


21

आप कोटलिन को जावा में बदल सकते हैं। फिर आप देख सकते हैं कि कॉन्स्ट में वैल की तुलना में एक अधिक स्थिर संशोधक है । इस तरह सरल कोड।

Kotlin:

const val str = "hello"
class SimplePerson(val name: String, var age: Int)

जावा (भाग) के लिए:

@NotNull
public static final String str = "hello";

public final class SimplePerson {
   @NotNull
   private final String name;
   private int age;

   @NotNull
   public final String getName() {
      return this.name;
   }

   public final int getAge() {
      return this.age;
   }

   public final void setAge(int var1) {
      this.age = var1;
   }

   public SimplePerson(@NotNull String name, int age) {
      Intrinsics.checkParameterIsNotNull(name, "name");
      super();
      this.name = name;
      this.age = age;
   }
}

2
क्या कोई व्यक्ति टिप्पणी में बता सकता है कि यह जवाब गुमनामी के लिए क्यों दिया गया?
जेम्स जॉर्डन टेलर

3
@JamesJordanTaylor मैंने उत्थान किया। लेकिन मुझे लगता है कि यह इसलिए है क्योंकि कुछ लोगों ने इसे ध्यान से नहीं पढ़ा है, और एक त्वरित नज़र में यह उत्तर जावा से कोटलिन में परिवर्तित होने के बारे में बात कर रहा है, जो कि ऑफ-टॉपिक होगा।
user1032613

2
अगर constहटा दिया जाता है, तो क्या यह एक अलग जावा फ़ाइल देगा?
DYS

2
@DYS: मुझे लगता है कि यह "स्टैटिक" को हटा देगा और यह सिर्फ पब्लिक फाइनल स्ट्रिंग स्ट्रिंग = "हैलो" होगा;
वरुण अजय गुप्ता

5

दोनों valऔर constअपरिवर्तनीय है।

constका उपयोग संकलन-समय स्थिरांक घोषित करने के लिए किया जाता है, जबकि valरन-टाइम स्थिरांक के लिए।

const val VENDOR_NAME = "Kifayat Pashteen"  // Assignment done at compile-time

val PICon = getIP()  // Assignment done at run-time

4

जावा को कॉस्ट कोटलिन

const val Car_1 = "BUGATTI" // final static String Car_1 = "BUGATTI";

वेल कोटलिन टू जावा

val Car_1 = "BUGATTI"   // final String Car_1 = "BUGATTI";

सरल भाषा में

  1. कॉन्सल वैरिएबल का मूल्य संकलन समय पर जाना जाता है।
  2. घाटी का मान रन समय में स्थिरांक को परिभाषित करने के लिए उपयोग किया जाता है।

उदाहरण 1-

const val Car_1 = "BUGATTI"val Car_2 = getCar() ✔    
const val Car_3 = getCar()//Because the function will not get executed at the compile time so it will through error

fun getCar(): String {
    return "BUGATTI"
}

ऐसा इसलिए है क्योंकि getCar () रन टाइम पर मूल्यांकन किया जाता है और कार को मूल्य प्रदान करता है।

इसके अतिरिक्त -

  1. वैल रीड-ओनली मतलब अपरिवर्तनीय है जिसे रन-टाइम में जाना जाता है
  2. var उत्परिवर्तनीय है जिसे रन-टाइम में जाना जाता है
  3. const अपरिवर्तनीय हैं और वैरिएबल हैं जिन्हें संकलन-समय पर जाना जाता है

3

कोटलिन में, constऔर valदोनों अपरिवर्तनीयता का प्रतिनिधित्व करते हैं और केवल मूल्यों को पढ़ते हैं और finalजावा में कीवर्ड के रूप में कार्य करते हैं ।

valकीवर्ड का उपयोग रन टाइम वैल्यू constघोषित करने के लिए किया जाना चाहिए और कंपाइल टाइम वैल्यू घोषित करने के लिए कीवर्ड का उपयोग किया जाना चाहिए।

ध्यान रखें, कांस्टेबल का उपयोग केवल आदिम डेटा प्रकारों के साथ किया जाना चाहिए जो फ़ंक्शन और निर्माणकर्ताओं के लिए नहीं है।

Example -

const val fun1 = anyFunctionOrConstructor() // it is not fine
    val fun2 = anyFunctionOrConstructor() // it is perfectly fine
    
    const val aa = "My String" // it is perfectly fine

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