জাভাস্ক্রিপ্টে কনস্ট: এটি কখন ব্যবহার করবেন এবং এটি প্রয়োজনীয়?


349

আমি সম্প্রতি constজাভাস্ক্রিপ্টে কীওয়ার্ডটি পেয়েছি । আমি যা বলতে পারি তা থেকে, এটি অপরিবর্তনীয় ভেরিয়েবলগুলি তৈরি করতে ব্যবহৃত হয় এবং আমি এটি পরীক্ষা করে দেখেছি যে এটি পুনরায় সংজ্ঞায়িত করা যায় না (নোড.জেজে):

const x = 'const';
const x = 'not-const';

// Will give an error: 'constant 'x' has already been defined'

আমি বুঝতে পেরেছি যে এটি এখনও সমস্ত ব্রাউজার জুড়ে মানসম্মত হয়নি - তবে আমি কেবল নোড.জেএস ভি 8 এর প্রসঙ্গে আগ্রহী এবং আমি লক্ষ্য করেছি যে নির্দিষ্ট বিকাশকারী / প্রকল্পগুলি যখন varকীওয়ার্ডটির সাথে ব্যবহৃত হতে পারে তখন এটির পক্ষে প্রযোজ্য মনে হয় একই প্রভাব।

সুতরাং আমার প্রশ্নগুলি হ'ল:

  • কখন এটি constজায়গায় ব্যবহার করা উপযুক্ত var?
  • এটি প্রতিবার ব্যবহার করা উচিত যা কোনও ভেরিয়েবল যা পুনরায় বরাদ্দ দেওয়া হচ্ছে না তা ঘোষিত হয়েছে?
  • varএর স্থানে constবা তদ্বিপরীত ব্যবহার করা হলে এটি কি আসলেই কোনও পার্থক্য করে ?

1
এটি এখনও মানসম্মত বলে মনে হচ্ছে না (সম্ভবত ইসি 6 তে?) আপনি এটি সম্পর্কে অতিরিক্ত তথ্য পাবেন এখানে: বিকাশকারী.মোজিলা.আর.ইন.ইউএস
সেবাস্তিয়ান সি।

1
কনস্টের খারাপ পারফরম্যান্স থাকলেও jsperf.com/const-vs-var-mod-3
দীপু

উত্তর:


462

আপনার প্রশ্নের দুটি দিক রয়েছে: constপরিবর্তে ব্যবহারের প্রযুক্তিগত দিকগুলি varকী এবং এটি করার ক্ষেত্রে মানব-সম্পর্কিত দিকগুলি কী।

প্রযুক্তিগত পার্থক্য উল্লেখযোগ্য। সংকলিত ভাষাগুলিতে, সংকলন-সময়ে একটি ধ্রুবক প্রতিস্থাপন করা হবে এবং এর ব্যবহারের ফলে ডেড কোড অপসারণের মতো অন্যান্য অপ্টিমাইজেশনের জন্য কোডের রানটাইম দক্ষতা আরও বাড়ানো যাবে। সাম্প্রতিক (শিথিলভাবে ব্যবহৃত শব্দ) জাভাস্ক্রিপ্ট ইঞ্জিনগুলি আরও ভাল পারফরম্যান্স পেতে আসলে জেএস কোডটি সংকলন করে, তাই কনস্ট কীওয়ার্ডটি ব্যবহার করে তাদের জানানো হবে যে উপরে বর্ণিত অনুকূলিতকরণগুলি সম্ভব এবং এটি করা উচিত। এর ফলে আরও ভাল পারফরম্যান্স হয়।

মানব-সম্পর্কিত দিকটি মূলশব্দটির শব্দার্থ সম্পর্কে। একটি ভেরিয়েবল এমন একটি ডেটা স্ট্রাকচার যা এমন তথ্য ধারণ করে যা পরিবর্তিত হয় বলে আশা করা হয়। ধ্রুবক একটি ডেটা স্ট্রাকচার যা এমন তথ্য ধারণ করে যা কখনই পরিবর্তন হয় না change যদি ত্রুটির জন্য জায়গা থাকে তবে varসর্বদা ব্যবহার করা উচিত। যাইহোক, এমন কোনও তথ্য যা কোনও প্রোগ্রামের জীবদ্দশায় কখনই পরিবর্তন হয় না তা ঘোষণা করার দরকার নেই const। যদি বিভিন্ন পরিস্থিতিতে তথ্য পরিবর্তন হওয়া উচিত varতবে প্রকৃত পরিবর্তনটি আপনার কোডটিতে প্রদর্শিত না হলেও, এটি নির্দেশ করতে ব্যবহার করুন।


4
চিয়ার্স, আমি ধরে নিয়েছি যে মোজিলা / গুগল বিনা কারণে জেএস ইঞ্জিনগুলিতে কনস্ট সমর্থন যোগ করবে না। প্রযোজ্য যেখানে কনস্ট ব্যবহার করব তা নিশ্চিত করব।
axdg

6
constবস্তুগুলি পরিবর্তনীয় বলে মনে হচ্ছে, সুতরাং জেএস সংকলকটি সত্যই কতটা কঠোর তা আমি নিশ্চিত নই। হতে পারে "কঠোরভাবে ব্যবহার করুন" মোড একটি পার্থক্য তৈরি করে।
রুডি

9
@ রডি আপনি যে বৈশিষ্ট্যটির সন্ধান করছেন তাকে অবজেক্টকে হিমশীতল বলা হয় । constকেবলমাত্র "ভেরিয়েবল" কে অন্য মানতে পুনরায় সাইন ইন করা বাধা দেয়। const a = {}; a = {};কঠোর মোডে একটি ত্রুটি নিক্ষেপ করবে।
টিবিস

আমি বেশিরভাগ ভেরিয়েবলের জন্য সাধারণ পরিবর্তে কনস্ট ব্যবহার করি, ঠিক তেমন জাভাতে আমি বেশিরভাগ ভেরিয়েবলের ঘোষণায় ফাইনাল যুক্ত করি।
কোডিং

2
If there is room for error, var should always be used। ESLint এর মতো সরঞ্জামগুলি এখনই constলঙ্ঘনের দিকে ইশারা করে, এটি আর প্রযোজ্য নয় ।
প্রাণবন্ত- t

72

2017 আপডেট

এই উত্তরটি এখনও অনেক মনোযোগ পেয়েছে। এটি লক্ষণীয় যে এই উত্তরটি 2014 এর শুরুতে আবার পোস্ট করা হয়েছিল এবং এর পর থেকে অনেক কিছু পরিবর্তিত হয়েছিল।সমর্থন এখন আদর্শ। সমস্ত আধুনিক ব্রাউজার এখন সমর্থন করে constতাই কোনও সমস্যা ছাড়াই এটি ব্যবহার করা বেশ নিরাপদ হওয়া উচিত।


আসল উত্তর 2014 থেকে

সত্ত্বেও থাকার মোটামুটি শালীন ব্রাউজার সমর্থনের , আমি এখন জন্য এটি ব্যবহার এড়াতে চাই। থেকে উপর MDN এর নিবন্ধconst :

কনস্টের বর্তমান প্রয়োগটি একটি মজিলা-নির্দিষ্ট এক্সটেনশন এবং এটি ECMAScript 5 এর অংশ নয় It এটি ফায়ারফক্স এবং ক্রোমে সমর্থিত (ভি 8)। সাফারি 5.1.7 এবং অপেরা 12.00 হিসাবে, আপনি যদি এই ব্রাউজারগুলিতে কনস্টের সাথে কোনও ভেরিয়েবল সংজ্ঞায়িত করেন তবে আপনি পরেও এর মান পরিবর্তন করতে পারেন। এটি ইন্টারনেট এক্সপ্লোরার 6-10 এ সমর্থিত নয়, তবে এটি ইন্টারনেট এক্সপ্লোরার 11-এ অন্তর্ভুক্ত রয়েছে কনস্ট কীওয়ার্ডটি বর্তমানে ফাংশন স্কোপটিতে ধ্রুবককে ঘোষণা করে (যেমন ভেরিয়েবলগুলি ভেরিয়েবল হিসাবে ঘোষিত)।

এটি তখন বলে:

constECMAScript 6 দ্বারা সংজ্ঞায়িত হতে চলেছে, তবে বিভিন্ন শব্দার্থবিজ্ঞানের সাথে। লেট স্টেটমেন্টের সাথে ঘোষিত ভেরিয়েবলগুলির অনুরূপ, কনস্টের সাথে ঘোষিত ধ্রুবকগুলি ব্লক-স্কোপড হবে।

আপনি যদি ব্যবহার করেন তবে constআপনাকে কিছুটা পুরানো ব্রাউজারগুলিকে সমর্থন করার জন্য একটি যুক্ত করতে হবে।


6
দুর্দান্ত উত্তর - যদিও আমি এমডিএন-তে নিবন্ধটি ইতিমধ্যে পড়েছি। যেমনটি আমি বলেছি, ভি 8 বিশেষত কনস্টের সাথে ভিন্নরূপে আচরণ করা হবে কিনা তা নিয়ে আমি আরও আগ্রহী ছিলাম। আমি মনে করি @ টিবিস এটি পরিষ্কার করেছে।
axdg

জেমস সমর্থন দিক নির্দেশ করার জন্য ধন্যবাদ। সমস্ত জাভাস্ক্রিপ্ট উত্তরে ব্রাউজার সমর্থন ব্রেকডাউন অন্তর্ভুক্ত করা উচিত। সুন্দরভাবে ব্যাখ্যা করা হয়েছে
হাবসন ব্রোপা

4
দ্রষ্টব্য ES6 আগস্ট 2014 এ একটি বৈশিষ্ট্য-স্থিরতা পেয়েছে July জুলাই 2015 এ মানটি আনুষ্ঠানিকভাবে প্রকাশ করা হয়েছিল। আপনি যদি এখন এটি পড়ছেন তবে এর অর্থ হ'ল আপনার কোডটি কোনও আপ-টু-ডেট ইঞ্জিন দ্বারা পরিচালিত হয় তবে আপনার গৃহীত উত্তরটি অনুসরণ করা উচিত।
ফিলিপ দুপানোভিć

ওপি প্রশ্নটি
নোড.জেএস

পুনঃটুইট করুন এটি ২০১৪ সালের জানুয়ারী থেকেও এখন সম্ভবত 2017 সালে বেশিরভাগ
জেমস ডোনেলি

41

কেন ব্যবহার করবেন তার জন্য const, @ টিবোসের উত্তরের দুর্দান্ত।

কিন্তু তুমি বলেছিলে:

আমি যা বলতে পারি তা থেকে এটি অপরিবর্তনীয় ভেরিয়েবলগুলি তৈরি করতে ব্যবহৃত হয়

এটা ভুল । একটি ভেরিয়েবলকে রূপান্তর করা পুনরায় নিয়োগের থেকে পৃথক:

var hello = 'world' // assigning
hello = 'bonjour!' // reassigning

কনস্টের সাথে, আপনি এটি করতে পারবেন না:

const hello = 'world'
hello = 'bonjour!' // error

তবে আপনি আপনার পরিবর্তনশীলটি পরিবর্তন করতে পারেন:

const marks = [92, 83]
marks.push(95)
console.log(marks) // [92, 83, 95] -> the variable has been mutated.

সুতরাং, যে প্রক্রিয়াটি সাইন ব্যবহার না করে ভেরিয়েবলের মান পরিবর্তন করে তা ভেরিয়েবলকে =পরিবর্তন করে।

দ্রষ্টব্য: +=উদাহরণস্বরূপ ... পুনরায় বরাদ্দকরণ!

var a = 5
a += 2 // is the same as a = a + 2

সুতরাং, বটম লাইন হল: constথেকে বাধা দেয় না mutating ভেরিয়েবল, তোমাদের থেকে বাধা দেয় পুনরায় বরাদ্দ তাদের।


4
আপনার বক্তব্য "যে প্রক্রিয়াটি সাইন ব্যবহার না করে ভেরিয়েবলের মান পরিবর্তন করে =তা নিঃশব্দ করা হয়" প্রযুক্তিগতভাবে ভুল। উদাহরণস্বরূপ, const marks=[92,83]; marks[2]=95; console.log(marks)আউটপুট হবে [92, 83, 95]marksসমান চিহ্নের মাধ্যমে পরিবর্তন করা হয়েছে been
ছারভে

5
"কিন্তু তুমি বলেছিলে: << থেকে আমি কি বলতে পারেন, এটা অপরিবর্তনীয় ভেরিয়েবল তৈরি করতে ব্যবহার করা হয় >> যে ভুল mutating একটি পরিবর্তনশীল পুনরায় নির্ধারণের থেকে আলাদা।" না, এটা নয়। পুনরায় সাইন ইন করা চলককে পরিবর্তন করছে। আপনি ভেরিয়েবলের মধ্যে রেফারেন্সটি উল্লেখ করে এমন বস্তুর পরিবর্তনের কথা বলছেন। এটি সম্পূর্ণ আলাদা জিনিস।
টিজে ক্রাউডার

এখানে পেয়েছি কারণ আমি constঅ্যারের প্রসঙ্গে বুঝতে চেষ্টা করছি (@ ছারভে ব্যবহৃত উদাহরণের অনুরূপ)। ক্ষেত্রে প্রতিটি সময় পুনরায় নির্ধারিত হয়। তাহলে কেন ব্যবহার করবেন না ? const countArray = countup(n - 1); countArray.push(n);constconstvar
ওয়াইকোড

1
@ ওয়াইকোড নং আপনি যখন ব্যবহার করবেন const countArray, এটি কখনই পুনরায় নিয়োগ দেওয়া হবে না । আপনি এখনও অ্যারেতে ঠেলাতে পারেন, যা এর সদস্য এবং দৈর্ঘ্য পরিবর্তন করে, তবে আমরা সেই পুনর্নির্ধারণকে কল করি না। আপনি constপরিবর্তে letবা varযখন পুনরায় নিযুক্তকরণ প্রতিরোধ করতে চান তখন আপনি ব্যবহার করেন । BTW আপনি না পুনরায় নির্ধারণের অনুমতি দিতে চান, letপ্রায় সবসময় বেশী ভালো var
ছারভে

@ ছারভে ধন্যবাদ! আপনার প্রতিক্রিয়া আমাকে "রেফারেন্স দ্বারা মান বনাম পাস", একটি নতুন ধারণা এবং একটি অদ্ভুত - যেখানে মান পরিবর্তন ≠ পুনরায় নিয়োগের দিকে পরিচালিত করে। : যেকেউ আরো ব্যাখ্যার প্রয়োজন এখানে উত্তর পরীক্ষা করা উচিত stackoverflow.com/q/46131828/5965865
YCode

38

পূর্ববর্তী উত্তরগুলিকে একীভূত করতে পারফরম্যান্সের কারণ ব্যতীত ধ্রুবক ভেরিয়েবলগুলি ঘোষণা করার একটি সুস্পষ্ট সুবিধা রয়েছে: যদি আপনি ঘটনাক্রমে কোডে এগুলি পরিবর্তন বা পুনরায় ঘোষণা করার চেষ্টা করেন তবে প্রোগ্রামটি যথাক্রমে মান পরিবর্তন করবে না বা ত্রুটি ছুঁড়ে দেবে না।

উদাহরণস্বরূপ, তুলনা করুন:

// Will output 'SECRET'

const x = 'SECRET'
if (x = 'ANOTHER_SECRET') {  // Warning! assigning a value variable in an if condition
    console.log (x)
}

সঙ্গে:

// Will output 'ANOTHER_SECRET'

var y = 'SECRET'
if (y = 'ANOTHER_SECRET') { 
    console.log (y)
}

অথবা

// Will throw TypeError: const 'x' has already been declared

const x = "SECRET"

/*  complex code */

var x = 0

সঙ্গে

// Will reassign y and cause trouble

var y = "SECRET"

/*  complex code */

var y = 0

আপনার বলা উচিত যে এই "অপরিবর্তনীয়" আচরণটি কেবল স্ট্রিংস, বেসিক টাইপের ক্ষেত্রে প্রযোজ্য। অবজেক্টস, অ্যারে ইত্যাদি ব্যবহার করে মানগুলি পরিবর্তন করা সম্ভব তবে নতুন "অবজেক্ট" পুনরায় বরাদ্দ করা সম্ভব নয়, যেমন কনস্ট এ = ["a", "বি"]; a = []; একটি ত্রুটি নিক্ষেপ করা হবে অন্যথায় এটি সম্ভব
ফের টু

আপনার একটি উদাহরণ থাকা উচিত যেখানে আপনি চেষ্টা করেন এবং ধ্রুবকের মানও পরিবর্তন করেন।
জোশুয়া পিন্টার

কনস্ট ব্যবহার করা অ্যাক্সেস মডিফায়ারগুলির মতো, সত্য অপরিবর্তনশীলতা লক্ষ্য নয়।
স্টিংজি জ্যাক

32

constহয় না অপরিবর্তনীয়।

এমডিএন থেকে :

কনস্টের ঘোষণাটি একটি মানকে কেবল পঠনযোগ্য রেফারেন্স তৈরি করে। এর অর্থ এই নয় যে এটির মানটি অপরিবর্তনীয়, কেবলমাত্র ভেরিয়েবল আইডেন্টিফায়ারকে পুনরায় নিয়োগ দেওয়া যায় না।


24
যদিও এটি কিছুটা বিভ্রান্তিকর। সংখ্যা, স্ট্রিং, বুলিয়ান ইত্যাদির জন্য (আদিম) constঅপরিবর্তনীয়। বস্তু এবং অ্যারেগুলির জন্য এটি পুনরায় নিয়োগ দেওয়া যায় না, তবে সামগ্রীগুলি পরিবর্তন করা যেতে পারে (যেমন অ্যারে.পশ) ar
ফ্লোরিয়ান ওয়েন্ডলবর্ণ

2
জেএস আদিমরা যদিও সর্বদা অপরিবর্তনীয়। আপনি ব্যবহার করেন constবা না তা প্রভাবিত করে না।
12

1
@ ডোডেকরেট সুতরাং সংজ্ঞা দ্বারা এটি পরিবর্তনযোগ্য নয়। মানগুলি যদি এটি পরিবর্তন করতে পারে তবে তা পরিবর্তনযোগ্য নয়, যদিও এটি আপনার তালিকাভুক্ত আদিমদের জন্য অপরিবর্তনীয় হিসাবে কাজ করে
অ্যান্টনি

13

var : একটি ভেরিয়েবল, মান শুরুর বিকল্প laচ্ছিক ঘোষণা করুন।

যাক : ব্লক স্কোপ সহ একটি স্থানীয় ভেরিয়েবল ঘোষণা করুন।

কনস্ট : কেবল পঠিত নাম ধ্রুবক ঘোষণা করুন।

উদা:

var a;
a = 1;
a = 2;//re-initialize possible
var a = 3;//re-declare
console.log(a);//3

let b;
b = 5;
b = 6;//re-initiliaze possible
// let b = 7; //re-declare not possible
console.log(b);

// const c;
// c = 9;   //initialization and declaration at same place
const c = 9;
// const c = 9;// re-declare and initialization is not possible
console.log(c);//9
// NOTE: Constants can be declared with uppercase or lowercase, but a common
// convention is to use all-uppercase letters.

10

আপনার দুর্দান্ত উত্তর রয়েছে তবে আসুন এটি সহজ রাখুন।

const যখন আপনার একটি সংজ্ঞায়িত ধ্রুবক থাকে তখন ব্যবহার করা উচিত (এটি পড়ুন: এটি আপনার প্রোগ্রামের প্রয়োগের সময় পরিবর্তিত হবে না)।

উদাহরণ স্বরূপ:

const pi = 3.1415926535

আপনি যদি মনে করেন যে এটি এমন কিছু যা পরে মৃত্যুদন্ড কার্যকর করার সময় পরিবর্তিত হতে পারে তবে একটি ব্যবহার করুন var

উদাহরণের ভিত্তিতে ব্যবহারিক পার্থক্যটি হ'ল constআপনার সাথে সর্বদা অনুমান করা হবে যে পাই হবে 3.14 [...], এটি একটি সত্য।

যদি আপনি এটিকে সংজ্ঞায়িত করেন তবে এটি var3.14 [...] হতে পারে বা নাও হতে পারে।

আরও প্রযুক্তিগত উত্তরের জন্য @ টিবোস একাডেমিকভাবে সঠিক।


7

আমার অভিজ্ঞতায় আমি কনস্ট ব্যবহার করি যখন আমি কিছু সেট করতে চাই যখন পরে কোড কোডটি হার্ড কোডিং করা হয়েছে তার জন্য অনুসন্ধান না করেই পরিবর্তন করতে চাই may যেমন একটি ফাইল পাথ বা সার্ভারের নাম।

আপনার পরীক্ষায় ত্রুটিটি অন্য একটি বিষয়, যদিও আপনি x নামক আরও একটি ভেরিয়েবল বানাতে চেষ্টা করছেন, এটি আরও সঠিক পরীক্ষা হবে।

const x = 'const';
x = 'not-const';

9
আপনি যা বলতে চাইছেন তা আমি পেয়েছি তবে - এটি মজার বিষয় যে আপনার জন্য "ধ্রুবক" অর্থ "জিনিসটি আমি বদলে দিতে চাই"। : পি
ভেন্রিক্স

4

ব্যক্তিগত পছন্দ সত্যই। আপনি কনস্টেট ব্যবহার করতে পারেন, যেমন আপনি বলেছেন, এটি পুনরায় বরাদ্দ দেওয়া হবে না এবং স্থির থাকে। উদাহরণস্বরূপ যদি আপনি নিজের জন্মদিনটি বরাদ্দ করতে চান। আপনার জন্মদিন কখনই পরিবর্তন হয় না তাই আপনি এটিকে ধ্রুবক হিসাবে ব্যবহার করতে পারেন। তবে আপনার বয়স পরিবর্তন হয় যাতে এটি পরিবর্তনশীল হতে পারে।


17
এটি একটি দীর্ঘ দীর্ঘ চলমান স্ক্রিপ্ট হবে!
nullability

3
@ ন্যায্যতা নির্ভর করে আপনি কত ব্যক্তির বয়স ট্র্যাক করছেন। কয়েক ডজনেরও বেশি এবং স্ক্রিপ্টটি বেশি দিন চলতে হবে না :)।
মিলি স্মিথ

4

সারসংক্ষেপ:

কনট একটি অপরিবর্তনীয় বাঁধাই তৈরি করে যার অর্থ কনট ভেরিয়েবল আইডেন্টিফায়ার পুনরায় বরাদ্দযোগ্য নয়।

const a = "value1";

আপনি এটি দিয়ে পুনরায় বরাদ্দ করতে পারবেন না

a = "value2";

তবে কনস্ট আইডেন্টিফায়ার যদি কোনও বস্তু বা একটি অ্যারে ধারণ করে তবে এর মানটি যতদূর আমরা এটি পুনরায় বরাদ্দ করছি না তত পরিবর্তন করা যেতে পারে।

const x = { a: 1 }

x.a = 2; //is possible and allowed

const numbers = [1, 2];
numbers.push(3); //is possible and allowed

দয়া করে মনে রাখবেন const একটি ব্লক-scoped ঠিক এলইটি যা হিসাবে একই নয় Var (যা ফাংশন-scoped হয়)

সংক্ষেপে, যখন কিছু সম্ভবত নয় পুনরায় নিয়োগ মাধ্যমে পরিবর্তন ব্যবহার const অন্য ব্যবহারের দিন বা Var সুযোগ আপনার আছে চাই উপর নির্ভর করে।

কোডটি যখন মৃত হয়ে যায় তখন পুনরায় নিয়োগের মাধ্যমে কী পরিবর্তন করা যায় এবং কী হতে পারে না তা নিয়ে যুক্তিযুক্ত হওয়া অনেক সহজ। কনটকে একটি লেটে পরিবর্তন করা সহজ মৃত। এবং ডিফল্টরূপে কনস্টেটে যাওয়া আপনাকে এটি করার আগে দুবার ভাবতে বাধ্য করে। এবং এটি অনেক ক্ষেত্রে একটি ভাল জিনিস।


2

এটি সরবরাহ করে: 1) ধ্রুবক রেফারেন্স, যেমন কনস্ট x = [] - অ্যারেটি সংশোধন করা যেতে পারে, তবে এক্স অন্য অ্যারেতে নির্দেশ করতে পারে না; এবং 2) স্কপিং ব্লক করুন। কনস্ট্যান্ড এবং এর একসাথে ইক্যমা / / ২০১৫-এ পরিবর্তিত হবে https://strongloop.com/ স্ট্রblog/es6-variable-declarations/ এ আলোচনা দেখুন


2
Main point is that how to decide which one identifier should be used during development.
In java-script here are three identifiers.

1. var (Can re-declared & re-initialize)
2. const (Can't re-declared & re-initialize, can update array values by using push)
3. let (Can re-initialize but can't re-declare)

'var': কোডিংয়ের সময় যখন আমরা কোড-স্ট্যান্ডার্ডের কথা বলি তখন আমরা সাধারণত সনাক্তকারীটির নাম ব্যবহার করি যা অন্য ব্যবহারকারী / বিকাশকারী দ্বারা সহজে বোঝা যায়। উদাহরণস্বরূপ, যদি আমরা অনেকগুলি ফাংশন চিন্তা করে কাজ করি যেখানে আমরা কিছু ইনপুট ব্যবহার করি এবং এটি প্রক্রিয়া করি এবং কিছু ফলাফল ফিরে পাই, যেমন:

**Example of variable use**

function firstFunction(input1,input2)
{
 var process = input1 + 2; 
 var result = process - input2;
 return result;
}


function otherFunction(input1,input2)
{
 var process = input1 + 8; 
 var result = process * input2;
 return result;
}

উপরের উদাহরণগুলিতে উভয় ফাংশন বিভিন্ন -2 ফলাফল উত্পাদন করে তবে ভেরিয়েবলগুলির একই নাম ব্যবহার করে। এখানে আমরা দেখতে পারি 'প্রক্রিয়া' এবং 'ফলাফল' উভয়ই ভেরিয়েবল হিসাবে ব্যবহৃত হয় এবং সেগুলি হওয়া উচিত।

 **Example of constant with variable**

 const tax = 10; 
 const pi = 3.1415926535; 

function firstFunction(input1,input2)
{
 var process = input1 + 2; 
 var result = process - input2;
 result = (result * tax)/100; 
 return result;
}


function otherFunction(input1,input2)
{
 var process = input1 + 8; 
 var result = process * input2 * pi;
 return result;
}

জাভা স্ক্রিপ্টে 'লেট' ব্যবহার করার আগে আমাদের জেএস ফাইলের শীর্ষে 'ব্যবহার কঠোর' যুক্ত করতে হবে

 **Example of let with constant & variable**

 const tax = 10; 
 const pi = 3.1415926535; 
 let trackExecution = '';

function firstFunction(input1,input2)
{
 trackExecution += 'On firstFunction'; 
 var process = input1 + 2; 
 var result = process - input2;
 result = (result * tax)/100; 
 return result;
}


function otherFunction(input1,input2)
{
 trackExecution += 'On otherFunction'; # can add current time 
 var process = input1 + 8; 
 var result = process * input2 * pi;
 return result;
}

 firstFunction();
 otherFunction();
 console.log(trackExecution);

উপরের উদাহরণে আপনি কখন কোন ক্রিয়াকলাপটি কার্যকর করেছেন এবং কোন নির্দিষ্ট ক্রিয়া চলাকালীন কোন ক্রিয়াকলাপটি ব্যবহৃত হয়নি তা ট্র্যাক করতে পারেন।


1

প্রথমত, তিনটি দরকারী জিনিস const(এর সাথে ভাগ করে নেওয়া সুযোগের উন্নতিগুলি ব্যতীত let):

  • এটি পরে কোড পড়ার লোকদের জন্য নথি করে যে মানটি পরিবর্তন করা উচিত নয়।
  • এটি আপনাকে (বা আপনার পরে আসা কেউ) মান পরিবর্তন করতে বাধা দেয় যদি না তারা ফিরে যান এবং ইচ্ছাকৃতভাবে ঘোষণাটি পরিবর্তন না করে।
  • এটি জাভাস্ক্রিপ্ট ইঞ্জিনটিকে অপ্টিমাইজেশনের ক্ষেত্রে কিছু বিশ্লেষণ সংরক্ষণ করতে পারে । উদাহরণস্বরূপ, আপনি ঘোষণা করেছেন যে মানটি পরিবর্তন করতে পারে না, সুতরাং ইঞ্জিনটি মান পরিবর্তন করে কিনা তা নির্ধারণের জন্য কাজ করতে হবে না তাই এটি মান পরিবর্তন না করে তার ভিত্তিতে অনুকূলিতকরণের সিদ্ধান্ত নিতে পারে কি না।

তোমার প্রশ্নগুলো:

কখন এটি constজায়গায় ব্যবহার করা উপযুক্ত var?

আপনি করতে পারেন এটা কোনো সময় আপনি একটি পরিবর্তনশীল যার মানকে পরিবর্তন না ঘোষণা করছি না। আপনি যেটিকে উপযুক্ত বলে বিবেচনা করছেন তা সম্পূর্ণ আপনার পছন্দ / আপনার দলের পছন্দ অনুসারে।

এটি প্রতিবার ব্যবহার করা উচিত যা কোনও ভেরিয়েবল যা পুনরায় বরাদ্দ দেওয়া হচ্ছে না তা ঘোষিত হয়েছে?

এটি আপনার / আপনার দলের উপর নির্ভর করে।

var is used in place ofকনস্ট` বা তদ্বিপরীত যদি এটি আসলে কোনও পার্থক্য করে ?

হ্যাঁ:

  • varএবং constবিভিন্ন স্কোপ বিধি আছে। (আপনি এর letচেয়ে তুলনা করতে চেয়েছিলেন var)) বিশেষত: constএবং letব্লক-স্কোপড এবং যখন বিশ্বব্যাপী স্কোপ ব্যবহার করা হয়, তখন বৈশ্বিক বস্তুতে সম্পত্তি তৈরি করবেন না (যদিও তারা গ্লোবাল তৈরি করে)) varহয় বৈশ্বিক সুযোগ (যখন বৈশ্বিক স্কোপে ব্যবহৃত হয়) বা ফাংশন স্কোপ (এমনকি যদি কোনও ব্লক ব্যবহৃত হয়) থাকে এবং যখন বৈশ্বিক সুযোগে ব্যবহৃত হয়, তখন বৈশ্বিক বস্তুর উপর একটি সম্পত্তি তৈরি করে।
  • উপরে আমার "তিনটি দরকারী জিনিস" দেখুন, সেগুলি এই প্রশ্নের জন্য প্রযোজ্য।

1

শব্দার্থক varএবংlet

varএবং letমেশিন এবং অন্যান্য প্রোগ্রামারদের কাছে বিবৃতি:

আমি অভিপ্রায় করি যে কার্যনির্বাহীকরণের সময় এই কার্যভারের মান পরিবর্তন হয়। এই কার্যভারের শেষ মানটির উপর নির্ভর করবেন না।

ব্যবহার varএবং এর প্রভাবlet

varএবং letঅন্যান্য প্রোগ্রামারদের ঘোষণাপত্র থেকে শেষের ব্যবহার পর্যন্ত সমস্ত হস্তক্ষেপকারী কোডটি পড়তে বাধ্য করুন এবং প্রোগ্রামটির সম্পাদনের সময় সেই সময়ে নির্ধারিত মূল্যের মূল্য সম্পর্কে যুক্তি দেখান।

তারা ESLint এবং অন্যান্য ভাষা পরিষেবাদির জন্য মেশিনের যুক্তিকে দুর্বল করে পরে সঠিকভাবে ভুল টাইপযুক্ত ভেরিয়েবলের নামগুলি সনাক্ত করতে এবং বাইরের স্কোপ ভেরিয়েবলের নামগুলির স্কোপ পুনঃব্যবহারের জন্য যেখানে অন্তঃস্থল স্কোপটি ভুলে যেতে ভুলে যায়।

এগুলি রান কোডটাইমগুলি সমস্ত কোডেপথগুলিতে অনেকগুলি পুনরাবৃত্তি চালানোর কারণ হিসাবে সনাক্ত করে যে তারা প্রকৃতপক্ষে, ধ্রুবক, তারা তাদের অনুকূলিত করার আগে। তবুও এটি বাগ সনাক্তকরণ এবং বিকাশকারী বোধগম্যতার তুলনায় কোনও সমস্যার কম।

কখন ব্যবহার করতে হবে const

যদি প্রয়োগের সময়কালে রেফারেন্সের মান পরিবর্তন না হয় তবে প্রোগ্রামারের অভিপ্রায়টি প্রকাশ করার জন্য সঠিক বাক্য গঠন const। অবজেক্টের জন্য, রেফারেন্সের মান পরিবর্তন করার অর্থ অন্য অবজেক্টের দিকে নির্দেশ করা যেমন রেফারেন্সটি পরিবর্তনযোগ্য, তবে বস্তুটি নয়।

" const" অবজেক্টস

অবজেক্ট রেফারেন্সের জন্য, পয়েন্টারটিকে অন্য কোনও অবজেক্টে পরিবর্তন করা যায় না, তবে যে বস্তুটি তৈরি করা হয় এবং constঘোষণার জন্য বরাদ্দ করা হয় তা পরিবর্তনীয়। আপনি কোনও constরেফারেন্সড অ্যারে থেকে আইটেমগুলি যুক্ত করতে বা সরিয়ে ফেলতে পারেন এবং কোনও constরেফারেন্স করা বস্তুর উপর সম্পত্তি কীগুলিকে পরিবর্তন করতে পারেন ।

অপরিবর্তনীয় অবজেক্টগুলি অর্জন করতে (যা আবার আপনার কোডটি মানুষের ও মেশিনগুলির বিষয়ে তর্ক করতে আরও সহজ করে তোলে), আপনি Object.freezeঘোষণার / অ্যাসাইনমেন্ট / ক্রিয়েশনতে এই বিষয়টিকে এইভাবে করতে পারেন :

const Options = Object.freeze(['YES', 'NO'])

অবজেক্ট.ফ্রিজে পারফরম্যান্সে প্রভাব ফেলে তবে অন্যান্য কারণে আপনার কোড সম্ভবত ধীর। আপনি এটি প্রোফাইল করতে চান।

আপনি কোনও রাষ্ট্রীয় মেশিনে পরিবর্তিত বস্তুটিও encapsulate করতে পারেন এবং গভীর অনুলিপিগুলিকে মান হিসাবে ফেরত দিতে পারেন (এটি Redux এবং প্রতিক্রিয়া রাষ্ট্রের কাজটি করে)। প্রথম নীতিগুলি থেকে এটি কীভাবে তৈরি করা যায় তার উদাহরণের জন্য ব্রাউজার জেএসে পরিবর্তনীয় গ্লোবাল রাষ্ট্র এড়ানো দেখুন ।

কখন varএবং letএকটি ভাল ম্যাচ

letএবং varপরিবর্তনীয় রাষ্ট্রের প্রতিনিধিত্ব করে। তাদের, আমার মতে, কেবলমাত্র প্রকৃত পরিবর্তনীয় স্থিতির মডেল হিসাবে ব্যবহার করা উচিত । " সংযোগটি কি জীবিত? " এর মতো বিষয়গুলি ।

এগুলি টেস্টেবল স্টেট মেশিনে সর্বোত্তমভাবে আবদ্ধ হয় যা " সংযোগের বর্তমান অবস্থা " উপস্থাপন করে এমন ধ্রুবক মানগুলি প্রকাশ করে যা সময়ের যে কোনও সময় স্থির থাকে এবং আপনার বাকী কোডটি আসলে কী আগ্রহী।

পার্শ্ব-প্রতিক্রিয়া রচনা এবং ডেটা রূপান্তরকরণের সাথে প্রোগ্রামিং ইতিমধ্যে যথেষ্ট শক্ত hard জটিলতার উপর কেবলমাত্র গাদা দিয়ে ভেরিয়েবলের সাথে পরিবর্তনীয় স্থিতি তৈরি করে প্রতিটি ফাংশনকে অকেটেস্টেবল স্টেট মেশিনে পরিণত করা।

আরও জঘন্য ব্যাখ্যার জন্য, দেখুন মিউট্যান্টকে বাদ দিন - কেস এর জন্যconst



0

আমি জেএস সংকলন ব্যবসায়ের বিশেষজ্ঞ নই, তবে এটি বলার অর্থ আছে যে ভি 8 কনস্টের পতাকা থেকে ব্যবহার করে

সাধারণত ভেরিয়েবলগুলির একগুচ্ছ ঘোষণার পরে এবং পরিবর্তন করার পরে, স্মৃতিটি খণ্ডিত হয়ে যায়, এবং v8 কার্যকর করা বন্ধ করে দেয়, কয়েক সেকেন্ডের কিছু সময় বিরতি দেয়, জিসি তৈরি করে বা আবর্জনা সংগ্রহ করে।

কনস্ট ভি 8 এর সাথে যদি কোনও ভেরিয়েবল ঘোষিত হয় তবে এটি অন্য কনস্ট ভেরিয়েবলের মধ্যে একটি দৃ fixed় স্থির আকারের পাত্রে রাখার জন্য আত্মবিশ্বাসের সাথে থাকতে পারে, কারণ এটি কখনই পরিবর্তিত হবে না। এটি সেই ডেটাটাইপগুলির জন্য যথাযথ ক্রিয়াকলাপগুলি সংরক্ষণ করতে পারে যেহেতু ধরণটি পরিবর্তন হবে না।


0

যখন লেট এবং কনস্টের মধ্যে সিদ্ধান্তের কথা আসে , সর্বদা কনস্টকে পছন্দ করুন যাতে কোডটিতে ব্যবহারটি পরিষ্কার হয়। এইভাবে, আপনি যদি ভেরিয়েবলটি পুনরায় ঘোষণার চেষ্টা করেন তবে আপনি একটি ত্রুটি পাবেন। যদি অন্য কোন পছন্দ কিন্তু এটি Redeclare করা, শুধু জন্য সুইচ এলইটি । নোট করুন, যেমন অ্যান্টনি বলেছেন, মানগুলি স্থায়ী নয় (উদাহরণস্বরূপ, একটি কনস্ট) অবজেক্টে সম্পত্তি পরিবর্তিত হতে পারে)।

এটা আসে যখন Var , যেহেতু ES6 বাইরে, আমি এটা প্রকাশনা কোড এ আর কখনও ব্যবহৃত এবং এটির জন্য একটি ব্যবহারের ক্ষেত্রে মনে করতে পারবে না। তা সত্ত্বেও, সেই ভেরিয়েবল ঘোষিত হুঁশিয়ার Var ব্লক সুযোগ হবে না।

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