কম্পিউটার

এর মানে কি যে আদিম মানগুলি জাভাস্ক্রিপ্টে অপরিবর্তনীয়?

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

আদিম মান হল জিনিসগুলি যেমন:

  • সংখ্যা
  • স্ট্রিংস
  • বুলিয়ানস

অ-আদি মান হল:

  • বস্তু
  • ফাংশন

পরিবর্তনযোগ্য মানে এটি পারি পরিবর্তন করা হবে।

অপরিবর্তনীয় মানে এটি পারবে না পরিবর্তন করা হবে।

অ-আদি মানগুলি পরিবর্তনযোগ্য

নিম্নলিখিতটি একটি ভেরিয়েবলের জন্য নির্ধারিত লোকদের একটি তালিকা (অ্যারে):

let peopleList = ['Arnold', 'Linda', 'Sylvester', 'Dolph']

এখন আমি মিউটেট করতে চাই আমার তালিকা. মিউটেটের সহজ অর্থ হল পরিবর্তন। আমি জিন-ক্লডের সাথে আর্নল্ডকে অদলবদল করতে চাই এবং ফলাফলটি প্রিন্ট আউট করতে চাই:

let peopleList = ['Arnold', 'Linda', 'Sylvester', 'Dolph']

peopleList[0] = 'Jean-Claude'

console.log(peopleList)

এটা কাজ করেছে! আমরা শুধু একটি বিদ্যমান মান উপর একটি মিউটেশন করা. এই ক্ষেত্রে, বিদ্যমান মান ছিল একটি অ্যারে (তালিকা), বা আরও নির্দিষ্টভাবে, একটি অ্যারে অবজেক্ট .

জাভাস্ক্রিপ্টে, অ-আদি মানগুলি পরিবর্তনযোগ্য (পরিবর্তনযোগ্য)।

আদিম মান অপরিবর্তনীয়

নিম্নলিখিতটি একটি পাঠ্য (স্ট্রিং) মান যা একটি ভেরিয়েবলের সাথে বরাদ্দ করা হয়:

let person = 'Ernold'

বাজে, দুর্ভাগ্যবশত, আমরা আর্নল্ডের নামের প্রথম অক্ষরে A-এর পরিবর্তে একটি E ব্যবহার করে ভুল বানান করেছি। আসুন এটি দ্রুত পরিবর্তন করি এবং ফলাফলটি প্রিন্ট আউট করি:

let person = 'Ernold'

person[0] = 'A' 

console.log(person) // output: Ernold

কিসের অপেক্ষা? কেন এটা প্রিন্ট আউট “Ernold”? আমরা কি শুধু A এর সাথে E কে অদলবদল করিনি!?

না, কারণ আমরা যে মানটি পরিবর্তন করার চেষ্টা করছি সেটি হল একটি স্ট্রিং, যা একটি আদিম মান — এবং সমস্ত আদিম মান অপরিবর্তনীয় (অপরিবর্তনীয়)।

শুধুমাত্র অ-আদি মান (বস্তু এবং ফাংশন) পরিবর্তনযোগ্য।

বিভ্রান্ত?

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

আমাদের অ্যারে থেকে প্রথম নামটি প্রিন্ট করা যাক আগের থেকে:

let peopleList = ['Arnold', 'Linda', 'Sylvester', 'Dolph']

console.log(peopleList[0]) // output: "Arnold"

সেখানে অবাক হওয়ার কিছু নেই, এটি "Arnold" প্রিন্ট করে .

এখন আমাদের স্ট্রিং প্রথম অক্ষরটি প্রিন্ট করা যাক আগের থেকে (ভুল বানান নাম):

let person = 'Ernold'

console.log(person[0]) // output: ??

কি হবে বলে তুমি মনে কর?

...

...

এটা কাজ করেছে! এটি "E" প্রিন্ট করে !

আপনি কি আশা করেছিলেন যে উপরেরটি কাজ করবে না?

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

জাভাস্ক্রিপ্টে, আদিম মানগুলি হল শুধুমাত্র পঠনযোগ্য, যেখানে অ-আদি মান (বস্তু/অ্যারে, ফাংশন) উভয়ই পড়ুন এবং লিখুন।

এই কারণেই আমরা Arnold থেকে আমাদের অ্যারের প্রথম আইটেম মান পরিবর্তন (মিউটেট) করতে পারি Jean-Claude-এ আগে, কিন্তু আমরা "Ernold" থেকে একটি সাধারণ বানান ত্রুটি ঠিক করতে পারি না "Arnold"-এ — কারণ এটি একটি স্ট্রিং, এবং স্ট্রিং/আদিম মান অপরিবর্তনীয়।

ভেরিয়েবল বনাম মান

(আমি জানি আপনারা কেউ কি ভাবছেন)

যদিও আমরা এই সিদ্ধান্তে পৌঁছেছি যে আদিম মানগুলি অপরিবর্তনীয়, আমি এখনও "আর্নল্ড" এর বানান ভুল ঠিক করতে দৃঢ় প্রতিজ্ঞ। আসুন নতুন কিছু চেষ্টা করি!

নিম্নলিখিত কোডটি একবার দেখুন (এটি পড়ুন, সাবধানে):

let person = 'Ernold'

person = 'Arnold'

console.log(person) // output: ??

স্ট্রিং-এর মতো আদিম মান সম্পর্কে আপনি যা শিখেছেন তা বিবেচনা করে, আপনি কি মনে করেন উপরেরটি Arnold প্রিন্ট আউট করবে? , হ্যাঁ বা না?

...

(এটি সম্পর্কে চিন্তা করুন)

...

এটি Arnold প্রিন্ট আউট করে !

আপনার মধ্যে কেউ কেউ ইতিমধ্যে জানেন কেন, কিন্তু আপনি যদি তা না করেন তবে এটি স্বাভাবিক, আপনি মুহূর্তের মধ্যে একটি "আহা মুহূর্ত" অনুভব করবেন। নিচের অনুচ্ছেদটি মনোযোগ সহকারে পড়ুন।

উপরের কোডটি কাজ করে কারণ আমরা স্ট্রিং মান পরিবর্তন করছি না, আমরা এটি স্পর্শও করছি না। পরিবর্তে, আমরা একটি নতুন বরাদ্দ করছি৷ 'Arnold' নামক স্ট্রিং মান person কাছে পরিবর্তনশীল তাই এটি আর 'Ernold'-কে উল্লেখ করে না তারের উপকারিতা.

আদিম মান পরিবর্তন করতে পারে না, কিন্তু ভেরিয়েবল পরিবর্তন করতে পারে!

ভেরিয়েবল মান নয়, তাই পরিবর্তনশীলতা বা অপরিবর্তনীয়তার নিয়ম একই নয়। ভেরিয়েবল শুধুমাত্র মান নির্দেশ করে।

আমরা পূর্বের স্ট্রিং মান 'Ernold' স্পর্শ করিনি সরাসরি, আমরা শুধু আমাদের person বলেছি 'Arnold' নামক অন্য একটি স্ট্রিং নির্দেশ করার জন্য পরিবর্তনশীল এবং তারপর console.log() ব্যবহার করা হয় ফলাফল প্রিন্ট করার জন্য।

আপনাদের মধ্যে কেউ কেউ ভাবতে পারেন যে আমি এখানে মৃত ঘোড়াটিকে মারছি, তবে জাভাস্ক্রিপ্ট কীভাবে কাজ করে সে সম্পর্কে আপনার উপলব্ধি থাকা গুরুত্বপূর্ণ। পুনরাবৃত্তি আপনার বন্ধু।

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

সারাংশে:

জাভাস্ক্রিপ্টে:

  • অ-আদি মান উল্লেখ করা যেতে পারে, অ্যাক্সেস করা যেতে পারে — এবং পরিবর্তিত।
  • আদিম মান উল্লেখ করা যেতে পারে, অ্যাক্সেস করা যেতে পারে — কিন্তু পরিবর্তিত নয়।
  • ভেরিয়েবল এবং মান দুটি ভিন্ন জিনিস, ভিন্ন নিয়ম প্রযোজ্য।

  1. জাভাস্ক্রিপ্ট প্রতীক কি?

  2. জাভাস্ক্রিপ্টে প্রতিশ্রুতি কি?

  3. জাভাস্ক্রিপ্টে ফাংশন এক্সপ্রেশন কি?

  4. জাভাস্ক্রিপ্টে বন্ধ কি?