একটি বড় কোম্পানির অফিসে প্রতিদিন সকালে কর্মীদের কাজ বণ্টন করা হয়। অফিসের বস খুব সুসংগঠিত। তিনি প্রতিদিন সকালেই অফিসে আসেন এবং সবার কাজের তালিকা তৈরি করেন। তবে, একটি অদ্ভুত নিয়ম রয়েছে। তিনি প্রথমে সবার নাম তালিকায় লিখে রাখেন, কিন্তু কারা কী কাজ করবে সেটা পরে জানান। তাই সকালে সবার নাম জানা থাকলেও, তারা কী কাজ করবে সেটা পরবর্তীতে জানা যায়।
এখন, অফিসের দুই কর্মী হাবিব এবং মাহা তাদের
গল্প দেখা যাক।
হাবিব খুব গোছালো কর্মী। সে সকালেই তার নাম
তালিকা লেখার সাথে সাথে কাজের তালিকাও বসকে দিয়ে দেয়। বস যখন সকালবেলা তালিকা তৈরি
করেন, তখন তিনি হাবিবের নাম এবং তার কাজ দুটোই একসাথে পান। অফিসের শুরুতেই হাবিব কাজ
শুরু করে, কোনো ধরনের সমস্যা ছাড়াই।
মাহা একটু এলোমেলো। সকালবেলায় বস তার নাম
তালিকায় লিখে ফেলেন, কিন্তু কাজের তালিকা তখনো জমা হয়নি। বস তখন শুধু মাহার নাম দেখতে
পান, কিন্তু সে কী কাজ করবে সেটা জানেন না। পরবর্তীতে, যখন মাহা কাজের তালিকা দেয়,
তখন বস সেই কাজটা যোগ করেন। ফলে, প্রথমে মাহার কাজের তালিকায় শুধু তার নাম থাকে, কাজের
দায়িত্ব তখনো দেখা যায় না। কিছুক্ষণ পরে সে তার দায়িত্ব বুঝে নিয়ে কাজ শুরু করে।
বাস্তব উদাহরণ:
JavaScript এও একই রকমভাবে কাজ করে। যখন আপনি
একটি ভেরিয়েবল বা ফাংশন ডিক্লেয়ার করেন, JavaScript Engine প্রথমে সেই ভেরিয়েবল বা
ফাংশনের নাম খুঁজে নিয়ে উপরের দিকে নিয়ে আসে, ঠিক যেমন বস কর্মীর নাম তালিকায় লেখেন।
কিন্তু ভেরিয়েবলের মান বা ফাংশনের কাজ তখনো পাওয়া যায় না, যতক্ষণ না কোডে সেটি নির্ধারিত
হয়।
হাবিবের গল্পে সেই ভেরিয়েবল বা ফাংশনের মতো
যেখানে ডিক্লারেশন এবং মান (value) সঠিক সময়ে একসাথে করা হয়, তাই যখন কোড চালানো
হয়, তখন কোনো সমস্যার সৃষ্টি হয় না।
মাহার গল্পে সেই ভেরিয়েবল বা ফাংশনের মতো
যেখানে Hoisting এর কারণে শুধু ডিক্লারেশন উপরের দিকে চলে আসে, কিন্তু মান পরে আসে।
এ জন্য, যখন প্রথমবার সেই ভেরিয়েবল ব্যবহার করা হয়, তখন undefined পাওয়া যায়, কারণ
নাম জানা থাকলেও মান তখনো অ্যাসাইন করা হয়নি।
ঘুরে আসি Hoisting এর অফিস থেকে:
এই গল্পে বস হচ্ছেন JavaScript Engine। তিনি
প্রতিটি ভেরিয়েবল এবং ফাংশনের ডিক্লারেশন প্রথমেই খুঁজে বের করে তালিকায় নিয়ে আসেন,
কিন্তু তাদের মান বা কাজ তখনো পাওয়া যায় না। Hoisting এর ফলে নামগুলো আগে পাওয়া যায়,
কিন্তু মান পরে আসে, ঠিক যেমন কর্মীর নাম আগে তালিকায় আসে, কিন্তু কাজের তালিকা পরে
পাওয়া যায়।
আশা করি Hoisting সম্পর্কে সামান্য কিছু ধারণা
দিতে পেরেছি, ভুল ত্রুটি মার্জনীয়।