Variable Hoisting এবং Shadowing

Scope এবং Closures - কফিস্ক্রিপ্ট (CoffeeScript) - Web Development

262

Variable Hoisting এবং Variable Shadowing দুটি গুরুত্বপূর্ণ কনসেপ্ট যা JavaScript এবং CoffeeScript-এ কোড লেখার সময় গুরুত্বপূর্ণ ভূমিকা পালন করে। এখানে আমরা CoffeeScript-এ এই দুটি কনসেপ্ট কীভাবে কাজ করে তা বিস্তারিতভাবে আলোচনা করবো।


1. Variable Hoisting (ভেরিয়েবল হোইস্টিং)

Hoisting হচ্ছে JavaScript-এর একটি বৈশিষ্ট্য যেখানে ফাংশন বা স্কোপের শীর্ষে থাকা ভেরিয়েবল এবং ফাংশন ডিক্লারেশনগুলো স্বয়ংক্রিয়ভাবে উপরে তুলে নেওয়া হয়, এর মানে হচ্ছে, তারা ডিক্লারেশন হওয়ার আগে ব্যবহার করা যায়।

CoffeeScript-এ Variable Hoisting

CoffeeScript-এ JavaScript-এর মতোই hoisting ঘটে, তবে CoffeeScript-এর সিনট্যাক্স কিছুটা ভিন্ন। CoffeeScript-এ যেহেতু ভেরিয়েবল ডিক্লারেশন সরাসরি করা হয়, তাই স্কোপের শীর্ষে তাদের var বা let নির্দেশিকা ছাড়াই পৌঁছানো হয়।

যেমন:

console.log name  # undefined হবে
name = "CoffeeScript"

এখানে, CoffeeScript কোডটি JavaScript-এ রূপান্তরিত হলে:

console.log(name);  // undefined হবে
var name = "CoffeeScript";

এটি JavaScript-এর hoisting এর মতোই কাজ করে, যেখানে ভেরিয়েবলটি শীর্ষে চলে যায় তবে তার মানটি ডিফাইন হয় না যতক্ষণ না কোডের সেই লাইনে পৌঁছানো হয়।

Hoisting এবং let/const:

যদি আপনি let বা const ব্যবহার করেন, তবে এটি JavaScript-এ ব্লক স্কোপ তৈরি করে এবং hoisting-এ TDZ (Temporal Dead Zone) তৈরি হয়। এর মানে হল যে আপনি ভেরিয়েবলটি তার ডিক্লারেশনের আগে অ্যাক্সেস করতে পারবেন না।

console.log name  # ত্রুটি হবে: Cannot access 'name' before initialization
let name = "CoffeeScript"

এটি JavaScript-এ এইভাবে রূপান্তরিত হবে:

console.log(name);  // ত্রুটি হবে: Cannot access 'name' before initialization
let name = "CoffeeScript";

2. Variable Shadowing (ভেরিয়েবল শ্যাডোইং)

Variable Shadowing তখন ঘটে যখন একটি ভেরিয়েবল একটি নতুন স্কোপে আবার ডিক্লার করা হয়, যা আগের স্কোপে থাকা একই নামের ভেরিয়েবলকে "ঢেকে" ফেলে। CoffeeScript-এও আপনি একই নামের ভেরিয়েবল ব্যবহার করে স্কোপের মধ্যে ভেরিয়েবল শ্যাডো করতে পারেন।

CoffeeScript-এ Variable Shadowing

name = "Global"
console.log name  # "Global" হবে

doSomething = ->
  name = "Local"
  console.log name  # "Local" হবে

doSomething()
console.log name  # "Global" হবে

এখানে, name ভেরিয়েবলটি প্রথমে গ্লোবাল স্কোপে ডিক্লার করা হয়েছে এবং তারপর ফাংশন স্কোপে আবার ডিক্লার করা হয়েছে। ফাংশনের ভিতরে name এর মান Local হবে, কিন্তু ফাংশনের বাইরে name এর মান Global থাকবে।

JavaScript-এ কম্পাইল হওয়া কোড:

var name;

name = "Global";
console.log(name);  // "Global"

doSomething = function() {
  var name;

  name = "Local";
  return console.log(name);  // "Local"
};

doSomething();
console.log(name);  // "Global"

এখানে name ভেরিয়েবলটি ফাংশন স্কোপে শ্যাডো করা হয়েছে, এবং বাইরে থাকা name ভেরিয়েবলটি অপরিবর্তিত রয়েছে।


CoffeeScript-এ Variable Hoisting এবং Shadowing এর প্রভাব

  1. Hoisting: CoffeeScript-এ hoisting ঠিক JavaScript-এর মতোই কাজ করে, তবে কোডটি আরও পরিষ্কার হয় কারণ CoffeeScript-এ var, let, বা const ব্যবহার করার প্রয়োজন নেই। এর ফলে কোড আরো সংক্ষিপ্ত হয়, তবে আপনি যদি let বা const ব্যবহার করেন তবে TDZ (Temporal Dead Zone) থেকে সুরক্ষিত থাকবেন।
  2. Shadowing: CoffeeScript-এ একই নামের ভেরিয়েবলকে ভিন্ন স্কোপে ডিফাইন করার মাধ্যমে shadowing হতে পারে। এটি JavaScript এর মতো একইভাবে কাজ করে। আপনি যখন একটি নতুন স্কোপে একই নামের ভেরিয়েবল ডিফাইন করেন, এটি আগের স্কোপে থাকা ভেরিয়েবলকে "ঢেকে" ফেলে।

সারাংশ

  • Hoisting: CoffeeScript-এ JavaScript-এর মতোই ভেরিয়েবল হোইস্টিং ঘটে। তবে let বা const ব্যবহার করলে TDZ প্রভাবিত হতে পারে, যা ভেরিয়েবলকে ডিফাইন হওয়ার আগে অ্যাক্সেস করতে বাধা দেয়।
  • Shadowing: CoffeeScript-এ ভেরিয়েবল শ্যাডোইং JavaScript-এর মতো কাজ করে। নতুন স্কোপে একই নামের ভেরিয়েবল ব্যবহার করলে আগের স্কোপের ভেরিয়েবলটি শ্যাডো হয়।

CoffeeScript-এর এই বৈশিষ্ট্যগুলো JavaScript-এ কোড লেখার সময় হওয়া ত্রুটি এবং সমস্যা সমাধানে সহায়ক হতে পারে।

Content added By
Promotion

Are you sure to start over?

Loading...