let এবং const হল জাভাস্ক্রিপ্টের দুটি নতুন কীওয়ার্ড, যা ECMAScript 6 (ES6) এ প্রবর্তিত হয়েছে। এগুলি var কিওয়ার্ডের বিকল্প হিসেবে কাজ করে এবং কোড লেখার সময় আরও নির্ভরযোগ্য এবং সুরক্ষিত উপায় প্রদান করে। let এবং const এর মধ্যে মূল পার্থক্য এবং ব্যবহার বুঝতে পারা খুবই গুরুত্বপূর্ণ, কারণ এগুলি কোডের কর্মক্ষমতা এবং স্বচ্ছতা বাড়াতে সাহায্য করে।
let (let keyword)
let কিওয়ার্ড ব্যবহার করে আপনি ব্লক স্কোপড (block-scoped) ভেরিয়েবল ডিক্লেয়ার করতে পারেন। এর মানে হল যে, এটি শুধুমাত্র সেই ব্লক বা স্কোপের মধ্যে প্রযোজ্য যেখানে এটি ডিক্লেয়ার করা হয়েছে। এটি var কিওয়ার্ডের তুলনায় বেশি নির্ভরযোগ্য, কারণ var কিওয়ার্ড গ্লোবাল স্কোপে ডিক্লেয়ার হয়, যা কিছু ক্ষেত্রে সমস্যা সৃষ্টি করতে পারে।
বৈশিষ্ট্য:
- block-scoped:
letকেবলমাত্র যেই ব্লক (যেমন if statement বা loop) এর মধ্যে ডিক্লেয়ার করা হয়, সেখানে বৈধ থাকে। - একে নতুন মান দেওয়া সম্ভব (mutable)।
- Hoisting:
letকিওয়ার্ড ব্যবহার করলে ভেরিয়েবলটি hoist (উঠে) হয়, তবে তার আগে ব্যবহৃত হলে ত্রুটি (error) ঘটাবে (temporal dead zone).
উদাহরণ:
let name = "John"; // ব্লক স্কোপড ভেরিয়েবল
name = "Doe"; // পরিবর্তন করা সম্ভব
console.log(name); // "Doe"
let এর ব্যবহার তখনই সুবিধাজনক, যখন আপনি ব্লক স্তরে ভেরিয়েবল ডিক্লেয়ার করতে চান এবং সেই ভেরিয়েবলটি পরে পরিবর্তন করতে চান।
const (const keyword)
const কিওয়ার্ড ব্যবহার করে আপনি এমন একটি কনস্ট্যান্ট ভেরিয়েবল ডিক্লেয়ার করতে পারেন, যার মান একবার নির্ধারণ করার পর পরিবর্তন করা যায় না। এটি শুধুমাত্র immutable (অপরিবর্তনীয়) ডাটা কাজের জন্য ব্যবহৃত হয়। তবে, আপনি const ব্যবহার করে যেকোনো অবজেক্ট বা অ্যারে ডিক্লেয়ার করলে তার কন্টেন্ট পরিবর্তন করা সম্ভব (কেবল পুঙ্খানুপুঙ্খ অবজেক্ট বা অ্যারে নয়)।
বৈশিষ্ট্য:
- block-scoped:
constকেবলমাত্র ব্লক স্কোপে প্রযোজ্য। - একবার মান সেট করলে, পরবর্তীতে পরিবর্তন করা যায় না (immutable)।
- Hoisting:
constকিওয়ার্ডের ক্ষেত্রেও hoisting ঘটে, তবে এটি ভেরিয়েবলটি ডিক্লেয়ারের আগ পর্যন্ত ব্যবহৃত হলে ত্রুটি ঘটাবে (temporal dead zone)।
উদাহরণ:
const age = 30; // কনস্ট্যান্ট ভেরিয়েবল
// age = 35; // এই লাইনটি ত্রুটি (error) হবে কারণ কনস্ট ভেরিয়েবল পরিবর্তনযোগ্য নয়
console.log(age); // "30"
const মূলত সেই সময় ব্যবহৃত হয় যখন আপনাকে এমন একটি ভেরিয়েবল চিহ্নিত করতে হবে যার মান কখনও পরিবর্তন হবে না, যেমন কনস্ট্যান্ট সংখ্যা বা স্ট্রিং।
let vs const: পার্থক্য
| বৈশিষ্ট্য | let | const |
|---|---|---|
| স্কোপ | ব্লক স্কোপড (block-scoped) | ব্লক স্কোপড (block-scoped) |
| মান পরিবর্তন | মান পরিবর্তন করা যায় | একবার নির্ধারণের পর পরিবর্তন করা যায় না |
| আরম্ভিক মান | শুরুতে ডিফাইন না করলেও সমস্যা হয়নি | শুরুতে মান প্রদান বাধ্যতামূলক |
| হোইস্টিং | হোইস্ট হয়, তবে ব্যবহার করা যাবে না ডিক্লেয়ার হওয়ার আগে | হোইস্ট হয়, তবে ব্যবহার করা যাবে না ডিক্লেয়ার হওয়ার আগে |
কোনটি কখন ব্যবহার করবেন?
- let ব্যবহার করুন যখন:
- আপনাকে ব্লক স্কোপের মধ্যে ভেরিয়েবল ডিক্লেয়ার করতে হবে।
- আপনি ভেরিয়েবলটির মান পরবর্তীতে পরিবর্তন করবেন।
- const ব্যবহার করুন যখন:
- আপনি এমন একটি ভেরিয়েবল ডিক্লেয়ার করতে চান, যার মান কখনো পরিবর্তন হবে না।
- যেমন, প্রাথমিক কনফিগারেশন বা এমন কিছু যা সবসময় অপরিবর্তিত থাকবে।
সারাংশ:
let এবং const দুটোই ES6 এর গুরুত্বপূর্ণ নতুন কিওয়ার্ড, যা কোডিংকে আরও সুরক্ষিত এবং পরিষ্কার করে তোলে। let মান পরিবর্তনযোগ্য এবং ব্লক স্কোপড ভেরিয়েবল ডিক্লেয়ার করার জন্য ব্যবহার করা হয়, আর const অপরিবর্তনীয় (immutable) ভেরিয়েবল ডিক্লেয়ার করার জন্য ব্যবহার করা হয়, যা একবার সেট হলে আর পরিবর্তন করা সম্ভব নয়।
let এবং const হলো ES6 (ECMAScript 6) এর দুটি নতুন কীওয়ার্ড যা var কিওয়ার্ডের বিকল্প হিসেবে ব্যবহৃত হয়। এগুলি ব্লক-স্কোপড (block-scoped), অর্থাৎ এই ভ্যারিয়েবলগুলি শুধুমাত্র তাদের ব্লক বা কোড স্কোপের মধ্যে প্রযোজ্য থাকে। let এবং const এর মধ্যে প্রধান পার্থক্য হল, যেখানে let এর মাধ্যমে ডিক্লেয়ার করা ভ্যারিয়েবলটি পরিবর্তনযোগ্য (mutable), সেখানে const এর মাধ্যমে ডিক্লেয়ার করা ভ্যারিয়েবলটি অপরিবর্তনীয় (immutable)।
এগুলোর ব্যবহার বুঝে কোড লেখা, বিশেষ করে বড় প্রোজেক্টে, সহজ এবং সুরক্ষিত কোডিং প্রাকটিসের জন্য খুবই গুরুত্বপূর্ণ।
let (let keyword)
let কিওয়ার্ড দিয়ে ব্লক স্কোপড ভ্যারিয়েবল ডিক্লেয়ার করা হয়। এর মান পরিবর্তনযোগ্য (mutable), অর্থাৎ একবার একটি মান নির্ধারণ করার পর আপনি এটি পরিবর্তন করতে পারেন।
বৈশিষ্ট্য:
- Block-scoped: এটি ব্লক স্তরে স্কোপ (scope) করে থাকে, অর্থাৎ যেখানে এটি ডিক্লেয়ার করা হয়েছে, শুধুমাত্র সেখানে এটি প্রযোজ্য।
- পরিবর্তনযোগ্য (mutable): মান পরিবর্তন করা সম্ভব।
- Hoisting: let ভ্যারিয়েবল হোইস্টিং প্রক্রিয়ায় চলে, তবে এটি "Temporal Dead Zone" (TDZ) এর মধ্যে থাকে, যার মানে হল যে ভ্যারিয়েবলটি ডিক্লেয়ার হওয়ার আগে এটি ব্যবহৃত হলে ত্রুটি (error) হবে।
উদাহরণ:
let name = "John"; // ভ্যারিয়েবল ঘোষণা
name = "Doe"; // পরিবর্তন করা সম্ভব
console.log(name); // আউটপুট হবে "Doe"
const (const keyword)
const কিওয়ার্ড দিয়ে এমন একটি ভ্যারিয়েবল ডিক্লেয়ার করা হয়, যার মান একবার নির্ধারণ করার পর তা আর পরিবর্তন করা যায় না। এটি immutable (অপরিবর্তনীয়) ভ্যারিয়েবল ডিফাইন করার জন্য ব্যবহৃত হয়।
বৈশিষ্ট্য:
- Block-scoped:
constকেবলমাত্র ব্লক স্তরের স্কোপে প্রযোজ্য। - অপরিবর্তনীয় (immutable): একবার মান নির্ধারণ করার পর, ভ্যারিয়েবলটির মান পরিবর্তন করা সম্ভব নয়।
- Hoisting: const ভ্যারিয়েবলও হোইস্টিং প্রক্রিয়ায় চলে, তবে এটি Temporal Dead Zone এর মধ্যে থাকে, যার মানে ভ্যারিয়েবলটি ডিক্লেয়ার হওয়ার আগেই ব্যবহৃত হলে ত্রুটি ঘটবে।
উদাহরণ:
const age = 30; // কনস্ট্যান্ট ভ্যারিয়েবল ঘোষণা
// age = 35; // এটি ত্রুটি দিবে, কারণ কনস্ট ভ্যারিয়েবল পরিবর্তনযোগ্য নয়
console.log(age); // আউটপুট হবে "30"
let vs const: তুলনা
| বৈশিষ্ট্য | let | const |
|---|---|---|
| স্কোপ | ব্লক স্কোপড (block-scoped) | ব্লক স্কোপড (block-scoped) |
| মান পরিবর্তন | মান পরিবর্তন করা যায় | একবার নির্ধারণের পর পরিবর্তন করা যায় না |
| হোইস্টিং | হোইস্ট করা হয়, তবে Temporal Dead Zone থাকে। | হোইস্ট করা হয়, তবে Temporal Dead Zone থাকে। |
| ব্যবহার | যখন ভ্যারিয়েবলটির মান পরিবর্তন করা প্রয়োজন | যখন ভ্যারিয়েবলটির মান অপরিবর্তনীয় থাকতে হবে |
et এবং const এর ব্যবহারের উপযুক্ততা
- let ব্যবহার করুন:
- যখন আপনি ব্লক স্তরে একটি ভ্যারিয়েবল ডিক্লেয়ার করতে চান যা পরবর্তীতে পরিবর্তনযোগ্য।
- যখন লুপ বা শর্তাধীন অবস্থায় ভ্যারিয়েবল ব্যবহার করা হবে।
- const ব্যবহার করুন:
- যখন আপনি এমন ভ্যারিয়েবল ডিক্লেয়ার করতে চান যার মান একবার সেট করার পর পরিবর্তন করা যাবে না, যেমন কনস্ট্যান্ট সংখ্যা বা স্ট্রিং।
- যখন আপনি অবজেক্ট বা অ্যারে ডিক্লেয়ার করতে চান, তবে তাদের কন্টেন্ট পরিবর্তন করতে পারবেন কিন্তু রেফারেন্স পরিবর্তন করা যাবে না।
সারাংশ: let এবং const জাভাস্ক্রিপ্টে ব্লক স্কোপড ভ্যারিয়েবল ডিক্লেয়ারের জন্য শক্তিশালী টুল। let ব্যবহৃত হয় যখন ভ্যারিয়েবলটির মান পরিবর্তনযোগ্য হওয়া প্রয়োজন, এবং const ব্যবহৃত হয় যখন আপনি এমন একটি ভ্যারিয়েবল চান যার মান কখনো পরিবর্তন হবে না।
var এর সাথে let এবং const এর পার্থক্য
var, let এবং const সবগুলোই জাভাস্ক্রিপ্টে ভ্যারিয়েবল ঘোষণা করার জন্য ব্যবহৃত হয়, তবে এই তিনটি কীওয়ার্ডের মধ্যে কিছু মৌলিক পার্থক্য রয়েছে। var কিওয়ার্ড ES5 এ ছিল, যেখানে let এবং const ES6 (ECMAScript 2015) এ প্রবর্তিত হয়। নিচে var, let, এবং const এর মধ্যে পার্থক্যগুলি বিস্তারিতভাবে আলোচনা করা হলো:
1. স্কোপ (Scope)
var:varকিওয়ার্ড গ্লোবাল স্কোপ বা ফাংশন স্কোপে ভ্যারিয়েবল ডিক্লেয়ার করে। এর মানে হলো,varদিয়ে ডিক্লেয়ার করা ভ্যারিয়েবল ফাংশনের বাইরে থেকেও অ্যাক্সেস করা যেতে পারে (গ্লোবাল স্কোপে) বা একে ফাংশনের মধ্যে সীমাবদ্ধ করা যায়।var name = "John"; // গ্লোবাল স্কোপে ভ্যারিয়েবল function greet() { var age = 30; // ফাংশন স্কোপে ভ্যারিয়েবল } console.log(name); // "John" (গ্লোবাল স্কোপে) console.log(age); // এরর (ফাংশন স্কোপে)letএবংconst:letএবংconstকেবলমাত্র ব্লক স্কোপড, অর্থাৎ এগুলি শুধুমাত্র সেই ব্লকের মধ্যে (যেমন if statement, loop) প্রযোজ্য যেখানে এগুলি ডিক্লেয়ার করা হয়। ব্লক স্কোপড ভ্যারিয়েবলগুলি ফাংশনের বাইরে অ্যাক্সেস করা যাবে না।if (true) { let name = "John"; const age = 30; } console.log(name); // এরর (ব্লক স্কোপে) console.log(age); // এরর (ব্লক স্কোপে)
2. হোইস্টিং (Hoisting)
var:varভ্যারিয়েবল হোইস্টিং হয়, তবে এটি undefined হিসেবে প্রাথমিকভাবে হোইস্ট হয়, মানে আপনি ভ্যারিয়েবলটি ডিক্লেয়ার হওয়ার আগে ব্যবহার করতে পারবেন, তবে তার মান undefined হবে।console.log(name); // undefined var name = "John"; console.log(name); // "John"letএবংconst:letএবংconstউভয়ই hoisting এর মাধ্যমে উঠলেও, এগুলির জন্য Temporal Dead Zone (TDZ) থাকে, যার মানে হল যে, এগুলির ব্যবহার ডিক্লেয়ার হওয়ার আগে করা যাবে না। যদি আপনি এগুলি ডিক্লেয়ার হওয়ার আগে ব্যবহার করেন, তাহলে ত্রুটি (error) হবে।console.log(name); // Error: Cannot access 'name' before initialization let name = "John";
3. মান পরিবর্তনযোগ্যতা (Reassignability)
var:varদ্বারা ডিক্লেয়ার করা ভ্যারিয়েবলটি পরিবর্তনযোগ্য (mutable), অর্থাৎ এর মান আপনি যে কোনো সময় পরিবর্তন করতে পারবেন।var name = "John"; name = "Doe"; // পরিবর্তন করা সম্ভব console.log(name); // "Doe"let:letদিয়ে ডিক্লেয়ার করা ভ্যারিয়েবলটি পরিবর্তনযোগ্য (mutable), এর মানও আপনি পরিবর্তন করতে পারবেন।let name = "John"; name = "Doe"; // পরিবর্তন করা সম্ভব console.log(name); // "Doe"const:constদিয়ে ডিক্লেয়ার করা ভ্যারিয়েবলটি অপরিবর্তনীয় (immutable), একবার মান সেট করার পর, আপনি এটি পরিবর্তন করতে পারবেন না।const name = "John"; name = "Doe"; // Error: Assignment to constant variable
4. ব্লক লেভেল স্কোপ (Block-Level Scope) vs ফাংশন লেভেল স্কোপ (Function-Level Scope)
var:varশুধুমাত্র ফাংশন লেভেল স্কোপে কাজ করে, অর্থাৎ এটি যদি ফাংশনের বাইরে ডিক্লেয়ার করা হয়, তবে এটি গ্লোবাল স্কোপে চলে আসে। কিন্তু, যদি এটি কোনো ফাংশনের মধ্যে ডিক্লেয়ার করা হয়, তবে শুধুমাত্র ঐ ফাংশনের মধ্যে প্রযোজ্য থাকে।if (true) { var name = "John"; // গ্লোবাল স্কোপে চলে আসে } console.log(name); // "John"letএবংconst:letএবংconstব্লক লেভেল স্কোপে থাকে। অর্থাৎ, এগুলি শুধুমাত্র সেই কোড ব্লকের মধ্যে প্রযোজ্য, যেখানে এগুলি ডিক্লেয়ার করা হয়েছে।if (true) { let name = "John"; // ব্লক স্কোপে } console.log(name); // Error: name is not defined
5. গ্লোবাল স্কোপে ভ্যারিয়েবল (Global Scope)
var:varকিওয়ার্ড গ্লোবাল স্কোপে ডিক্লেয়ার করা হলে, এটি window অবজেক্টের অংশ হয়ে যায় (যদি ব্রাউজারে কোড চলে)।var name = "John"; console.log(window.name); // "John"letএবংconst:letএবংconstগ্লোবাল স্কোপে ডিক্লেয়ার করা হলে, তারা window অবজেক্টের অংশ হয়ে যায় না, অর্থাৎ এগুলি গ্লোবাল স্কোপের অংশ হলেও window অবজেক্টে পৌঁছায় না।let name = "John"; console.log(window.name); // undefined
6. উপসংহার
var এবং let, const এর মধ্যে বেশ কিছু মৌলিক পার্থক্য রয়েছে:
varগ্লোবাল বা ফাংশন স্কোপড, তবেletএবংconstব্লক স্কোপড।varহোইস্টিং সাপোর্ট করে এবং তার মান undefined থাকে, যখনletএবংconstহোইস্টিং এর মাধ্যমে Temporal Dead Zone সৃষ্টি করে।varদ্বারা ডিক্লেয়ার করা ভ্যারিয়েবলটি যে কোনো সময় পরিবর্তনযোগ্য (mutable), তবেconstকনস্ট্যান্ট ভ্যারিয়েবল তৈরি করে যা পরিবর্তনযোগ্য নয়, আরletপরিবর্তনযোগ্য (mutable) ভ্যারিয়েবল তৈরি করে।
এগুলির সঠিক ব্যবহার আপনার কোডের নিরাপত্তা এবং কার্যকারিতা বাড়াতে সাহায্য করবে।
স্কোপ (Scope) হচ্ছে একটি ভ্যারিয়েবল বা ফাংশন কোথায় অ্যাক্সেসযোগ্য তা নির্ধারণ করে। স্কোপের মাধ্যমে জানানো হয় যে কোন স্থান থেকে কোন ভ্যারিয়েবল বা ফাংশনে অ্যাক্সেস করা সম্ভব এবং কোথায় তা সম্ভব নয়। ব্লক স্কোপ এবং ফাংশন স্কোপ এই দুইটি স্কোপের ধরন আলাদা।
1. ব্লক স্কোপ (Block Scope)
ব্লক স্কোপ মানে হচ্ছে ভ্যারিয়েবলটি শুধুমাত্র সেই ব্লক বা কোড ব্লকের মধ্যে প্রযোজ্য যেখানে এটি ডিক্লেয়ার করা হয়েছে। কোড ব্লক বলতে, {} এর মধ্যে থাকা কোড অংশকে বোঝানো হয়, যেমন if statement, for loop, while loop, বা অন্য যেকোনো ব্লক।
ES6 এর আগে, var কিওয়ার্ড ভ্যারিয়েবল ঘোষণা করার জন্য ব্যবহৃত হলেও, এটি শুধুমাত্র ফাংশন স্কোপ পর্যন্ত সীমাবদ্ধ ছিল, যার মানে এটি ব্লক স্তরে স্কোপে ছিল না। তবে ES6 এ let এবং const কিওয়ার্ড প্রবর্তিত হওয়ার পর, ভ্যারিয়েবলগুলোকে ব্লক স্কোপে সীমাবদ্ধ করা সম্ভব হয়েছে।
উদাহরণ:
if (true) {
let name = "John"; // ব্লক স্কোপড ভ্যারিয়েবল
const age = 30; // ব্লক স্কোপড কনস্ট্যান্ট
console.log(name); // "John" (ভ্যারিয়েবলটি ব্লক স্কোপের মধ্যে অ্যাক্সেসযোগ্য)
}
console.log(name); // Error: name is not defined (ব্লক স্কোপের বাইরে অ্যাক্সেস করা যাবে না)
console.log(age); // Error: age is not defined (ব্লক স্কোপের বাইরে অ্যাক্সেস করা যাবে না)
এখানে, name এবং age শুধু if ব্লকের মধ্যে অ্যাক্সেসযোগ্য, ব্লক শেষে এগুলির কোনো মান থাকবে না।
2. ফাংশন স্কোপ (Function Scope)
ফাংশন স্কোপ মানে হচ্ছে, ভ্যারিয়েবলটি শুধুমাত্র সেই ফাংশনের মধ্যে প্রযোজ্য যেখানে এটি ডিক্লেয়ার করা হয়েছে। এটি var কিওয়ার্ডের ক্ষেত্রে ব্যবহৃত প্রধান স্কোপ। অর্থাৎ, যদি আপনি কোনো ভ্যারিয়েবল ফাংশনের ভিতরে var দিয়ে ডিক্লেয়ার করেন, তবে এটি শুধুমাত্র ঐ ফাংশনের মধ্যে অ্যাক্সেসযোগ্য এবং ফাংশনের বাইরে একে অ্যাক্সেস করা যাবে না।
উদাহরণ:
function greet() {
var name = "John"; // ফাংশন স্কোপড ভ্যারিয়েবল
console.log(name); // "John" (ফাংশনের মধ্যে অ্যাক্সেসযোগ্য)
}
greet();
console.log(name); // Error: name is not defined (ফাংশন স্কোপের বাইরে অ্যাক্সেস করা যাবে না)
এখানে, name শুধুমাত্র greet ফাংশনের মধ্যে অ্যাক্সেসযোগ্য এবং ফাংশনটির বাইরে name ভ্যারিয়েবল অ্যাক্সেস করা যাবে না।
var এবং let/const এর মধ্যে স্কোপ পার্থক্য
| বৈশিষ্ট্য | var | let / const |
|---|---|---|
| স্কোপ | ফাংশন স্কোপড (Function-scoped) | ব্লক স্কোপড (Block-scoped) |
| ব্যবহার | একটি ফাংশনের মধ্যে সীমাবদ্ধ | ব্লক (যেমন if, for loop) এর মধ্যে সীমাবদ্ধ |
| উদাহরণ | var x = 10; | let x = 10; অথবা const x = 10; |
| ফাংশন স্কোপ | var এর ভ্যারিয়েবল শুধুমাত্র ফাংশনের মধ্যে কাজ করবে | let এবং const এর ভ্যারিয়েবল ব্লক স্তরের মধ্যে কাজ করবে |
অতিরিক্ত উদাহরণ
ব্লক স্কোপ:
for (let i = 0; i < 5; i++) {
console.log(i); // 0 থেকে 4 পর্যন্ত প্রিন্ট হবে
}
console.log(i); // Error: i is not defined (let দিয়ে ডিক্লেয়ার করা ভ্যারিয়েবল ব্লক স্কোপড)
এখানে, i শুধুমাত্র for লুপের ভিতরে অ্যাক্সেসযোগ্য। লুপের বাইরে এটি অ্যাক্সেসযোগ্য নয়, কারণ এটি ব্লক স্কোপড।
সারাংশ:
- ব্লক স্কোপ: ভ্যারিয়েবলটি কেবলমাত্র যেই ব্লকের মধ্যে ডিক্লেয়ার করা হয়েছে, সেখানে অ্যাক্সেস করা যায়।
letএবংconstএর ক্ষেত্রে এটি প্রযোজ্য। - ফাংশন স্কোপ: ভ্যারিয়েবলটি শুধু ঐ ফাংশনের মধ্যে প্রযোজ্য, যেখানে এটি
varদিয়ে ডিক্লেয়ার করা হয়েছে।
এই পার্থক্যগুলো বুঝে কোড লিখলে আপনার অ্যাপ্লিকেশন বা স্ক্রিপ্টের কার্যক্ষমতা এবং ডিবাগিং অনেক সহজ হবে।
const কিওয়ার্ড দিয়ে ডিক্লেয়ার করা ভ্যারিয়েবলগুলি immutable (অপরিবর্তনীয়) হয়, অর্থাৎ একবার ভ্যালু সেট করার পর, তা পরিবর্তন করা যায় না। কিন্তু এখানে একটি গুরুত্বপূর্ণ বিষয় হলো যে, const কেবলমাত্র ভ্যারিয়েবলের রেফারেন্সকে অপরিবর্তনীয় করে, কিন্তু যদি সেই ভ্যারিয়েবলটি কোনো অবজেক্ট বা অ্যারে হয়, তবে তার ভ্যালু (অথবা অবজেক্ট বা অ্যারের কন্টেন্ট) পরিবর্তন করা সম্ভব।
অর্থাৎ, const এর মাধ্যমে আপনি যেকোনো ভ্যারিয়েবল বা অবজেক্টের রেফারেন্স পরিবর্তন করতে পারবেন না, তবে যদি তা একটি অবজেক্ট বা অ্যারে হয়, তাহলে সেই অবজেক্ট বা অ্যারের ভ্যালু বা কন্টেন্ট আপডেট করা সম্ভব।
1. const দিয়ে Immutable Primitive ভ্যারিয়েবল
যখন আপনি const দিয়ে একটি primitive data type (যেমন string, number, boolean) ডিক্লেয়ার করেন, তখন সেই ভ্যারিয়েবলটির মান অপরিবর্তনীয় হয়ে যায়। একবার একটি মান নির্ধারণ করার পর, পরবর্তীতে আপনি সেটিকে পরিবর্তন করতে পারবেন না।
উদাহরণ:
const name = "John"; // String - Primitive type
name = "Doe"; // Error: Assignment to constant variable.
console.log(name); // এটি রান হবে না কারণ 'name' পরিবর্তনযোগ্য নয়।
এখানে, name একটি string যেহেতু primitive data type, তাই একবার সেট করা হলে এটি পরিবর্তন করা যাবে না। যদি আপনি পরিবর্তন করার চেষ্টা করেন, তাহলে error হবে।
2. const দিয়ে Immutable Object বা Array
যখন আপনি const দিয়ে একটি অবজেক্ট (Object) বা অ্যারে (Array) ডিক্লেয়ার করেন, তখন তার রেফারেন্স অপরিবর্তনীয় হয়ে যায়। অর্থাৎ আপনি ওই অবজেক্ট বা অ্যারের রেফারেন্সটি আর পরিবর্তন করতে পারবেন না, কিন্তু তার ভিতরের কন্টেন্ট পরিবর্তন করা সম্ভব।
অবজেক্ট (Object) উদাহরণ:
const person = {
name: "John",
age: 30
};
person.name = "Doe"; // এখানে কন্টেন্ট পরিবর্তন করা সম্ভব
console.log(person.name); // "Doe"
এখানে, person একটি অবজেক্ট, যার ভিতরের কন্টেন্ট পরিবর্তন করা যেতে পারে। তবে আপনি person এর রেফারেন্স (যেমন, person = {}) পরিবর্তন করতে পারবেন না।
অ্যারে (Array) উদাহরণ:
const numbers = [1, 2, 3];
numbers.push(4); // অ্যারের মধ্যে নতুন মান যোগ করা সম্ভব
console.log(numbers); // [1, 2, 3, 4]
এখানে, numbers একটি অ্যারে, যার ভিতরের ডেটা (যেমন push()) পরিবর্তন করা সম্ভব। তবে, আপনি numbers এর রেফারেন্সকে নতুন অ্যারে দিয়ে পরিবর্তন করতে পারবেন না, যেমন:
numbers = [5, 6, 7]; // Error: Assignment to constant variable.
const এর সাথে Immutable ডাটা: গুরুত্বপূর্ণ বিষয়গুলো
- Primitive Data Types:
constদিয়ে ডিক্লেয়ার করা primitive data types (যেমন string, number, boolean) কখনোই পরিবর্তন করা যাবে না। একবার মান সেট হলে, পরবর্তীতে সেটা পরিবর্তন করা সম্ভব নয়। - Object এবং Array:
constদিয়ে ডিক্লেয়ার করা objects বা arrays এর ভিতরের কন্টেন্ট পরিবর্তন করা সম্ভব। তবে, তাদের রেফারেন্স পরিবর্তন করা যাবে না। অর্থাৎ, আপনি ঐ অবজেক্ট বা অ্যারের মান পরিবর্তন করতে পারেন, কিন্তু ঐ অবজেক্ট বা অ্যারে অন্য কোনো অবজেক্ট বা অ্যারে দ্বারা প্রতিস্থাপন করতে পারবেন না। - Immutable Objects: যদি আপনি একটি সম্পূর্ণ অপরিবর্তনীয় (immutable) অবজেক্ট বা অ্যারে চান, তাহলে আপনাকে Object.freeze() বা Array.freeze() এর মতো পদ্ধতি ব্যবহার করতে হবে। এর মাধ্যমে আপনি অবজেক্টের বা অ্যারের সকল কন্টেন্টকে অপরিবর্তনীয় করতে পারবেন।
Immutable Object উদাহরণ:
const person = Object.freeze({
name: "John",
age: 30
});
person.name = "Doe"; // Error: Cannot assign to read only property 'name'
console.log(person.name); // "John"
সারাংশ
const দিয়ে ডিক্লেয়ার করা ভ্যারিয়েবলগুলি একবার মান নির্ধারণ করার পর পরিবর্তনযোগ্য নয়। তবে যদি তা কোনো অবজেক্ট বা অ্যারে হয়, তার কন্টেন্ট পরিবর্তন করা সম্ভব। const মূলত immutable references তৈরি করতে ব্যবহৃত হয়, কিন্তু অবজেক্ট বা অ্যারের ভিতরের ডেটা পরিবর্তন করা যেতে পারে।
Read more