"কনস্ট" এবং "ভাল" এর মধ্যে পার্থক্য কী?


276

আমি constকীওয়ার্ডটি সম্পর্কে সম্প্রতি পড়েছি এবং আমি খুব বিভ্রান্ত! আমি constএবং valকীওয়ার্ডের মধ্যে কোনও পার্থক্য খুঁজে পাচ্ছি না , আমি বোঝাতে চাইছি আমরা উভয়কেই একটি পরিবর্তনযোগ্য পরিবর্তনশীল করতে ব্যবহার করতে পারি, আমি মিস করছি এমন আর কি কিছু আছে?



আপনি এই নিবন্ধটি android4dev.com/differences-between-var-val-and-const-in-kotlin পড়তে পারেন বা এই ভিডিওটি দেখতে পারেন youtube.com/watch?v=DQLrEGqSSI8&t=6s
লোকেশ দেশাই

উত্তর:


388

constগুলি সংকলন সময় স্থির হয়। অর্থ যে সংকলনের সময় তাদের মান নির্ধারণ করতে হবে, এর বিপরীতে 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
@MathewHany, অন্তত না বাইটকোড পরিপ্রেক্ষিতে, দেখুন: stackoverflow.com/questions/37482378/static-data-in-kotlin/...
হট-

4
আমি মনে করি constসংকলনের সময় মানগুলি সম্পূর্ণরূপে অন্তর্ভুক্ত হবে।
লুকা জ্যাকোউইউটিজ

102
এটি আরও একটি প্রশ্ন জাগায়: কোটলিনকে ন্যায়বিচারের const valপরিবর্তে কেন দরকার const? আমার কাছে মনে হচ্ছে valকীওয়ার্ডটি এই প্রসঙ্গে পুরোপুরি অতিরিক্তভাবে প্রয়োজন, কারণ const varএটির মুখটি অযৌক্তিক হবে।
এরিক লয়েড

18
@ এরিকলয়েড উইথ const val, একটি কীওয়ার্ডের চেয়ে constপরিবর্তক on valসংশোধক> কীওয়ার্ড। এই একই নকশা আরো উদাহরণ আছে, annotation/enum/data class, private val, inline funইত্যাদি,
Aro,

38

কেবল লুকার জবাব যুক্ত করতে:

সংকলন-সময় ধ্রুবক

সংকলনের সময় যে মানটির পরিমাণ জানা যায় সেগুলি কনস্টের সংশোধক ব্যবহার করে সংকলন টাইম ধ্রুবক হিসাবে চিহ্নিত করা যেতে পারে। এই জাতীয় বৈশিষ্ট্যগুলির নিম্নলিখিত প্রয়োজনীয়তাগুলি পূরণ করতে হবে:

  • শীর্ষ-স্তরের বা কোনও বস্তুর ঘোষণার সদস্য বা কোনও সহযোগী বস্তু
  • স্ট্রিং বা একটি আদিম ধরণের টাইপের মান দিয়ে শুরু করা
  • কোনও কাস্টম গেটর নেই

এ জাতীয় বৈশিষ্ট্যগুলি টীকায় ব্যবহৃত হতে পারে।

সূত্র: অফিসিয়াল ডকুমেন্টেশন


21

আপনি কোটলিনটিকে জাভাতে রূপান্তর করতে পারেন। তারপর আপনি দেখতে পারেন const এক আরো আছে স্ট্যাটিক চেয়ে পরিবর্তক Val । এই মত সহজ কোড।

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
পছন্দ করেছেন তবে আমি এটি ধরে নিয়েছি কারণ কিছু লোক এটি মনোযোগ সহকারে পড়েনি, এবং একটি তাত্ক্ষণিকভাবে এই উত্তরটি জাভা থেকে কোটলিনে রূপান্তর করার বিষয়ে কথা বলছে বলে মনে হচ্ছে, যা অফ-টপিক হবে।
ব্যবহারকারী 1032613

2
যদি constসরানো হয়, তবে এটি কী আলাদা জাভা ফাইল দেবে?
ডিওয়াইএস

2
@ ডিওয়াইএস: আমি মনে করি এটি "স্ট্যাটিক" সরিয়ে দেবে এবং এটি কেবল সর্বজনীন চূড়ান্ত হবে স্ট্রিং স্ট্রিং = "হ্যালো";
বরুণ অজয় ​​গুপ্ত

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"
}

এটি কারণ গেটকার () রান চলাকালীন সময়ে মূল্যায়ন করা হয় এবং কারটিকে মান নির্ধারণ করে।

অতিরিক্তভাবে -

  1. ভাল কেবল পঠনযোগ্য অর্থ অপরিবর্তনীয় যা রান-টাইমে পরিচিত
  2. Var চপল যে রান সময়ে পরিচিত হয়
  3. কনস্ট অপরিবর্তনীয় এবং পরিবর্তনশীল যা সংকলন সময়ে পরিচিত known

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.