WeakMap ES6-এ একটি নতুন ডেটা স্ট্রাকচার, যা map এর মতো কাজ করে কিন্তু কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। সবচেয়ে উল্লেখযোগ্য পার্থক্য হল যে WeakMap এর কী (key) গুলো weakly referenced হয়, যার মানে, যখন কোনো কী আর রেফারেন্স না থাকে (অর্থাৎ, ওই কীটি আর ব্যবহৃত না হলে), তখন সেই কী এবং সংশ্লিষ্ট মান (value) গুলো garbage collected হয়ে যায়। ফলে এটি মেমরি ব্যবস্থাপনা এবং পরিষ্কার রাখার জন্য উপকারী।
WeakMap এর বৈশিষ্ট্য
- Weak References:
WeakMapএর কী গুলোকে weakly referenced রাখা হয়, যার ফলে সেই কীগুলোকে আর ব্যবহৃত না হলে সহজেই মেমরি থেকে মুছে ফেলা হয়। - Only Objects as Keys:
WeakMapএ কী হিসেবে শুধুমাত্র অবজেক্ট (objects) ব্যবহার করা যাবে, primitive values (যেমন: string, number) ব্যবহার করা যাবে না। - No Enumeration:
WeakMapএর কী ও ভ্যালুগুলির উপর enumeration করা সম্ভব নয়। অর্থাৎ,WeakMapএর মাধ্যমে কী এবং ভ্যালু গুলোর ওপর কোনোforEachবাfor...ofলুপ ব্যবহার করা যাবে না।
WeakMap সিনট্যাক্স
let weakmap = new WeakMap();
এখানে, weakmap একটি নতুন WeakMap অবজেক্ট। এখন আপনি set(), get(), has(), এবং delete() মেথড ব্যবহার করতে পারেন।
set(key, value): নতুন কী-মান (key-value) পেয়ার যোগ করে।get(key): একটি কী এর মান রিটার্ন করে।has(key): চেক করে যে একটি কী রয়েছে কিনা।delete(key): একটি কী-মান পেয়ার মুছে ফেলে।
WeakMap এর মাধ্যমে Object Keys সংরক্ষণ
WeakMap সাধারণত ব্যবহার করা হয় যখন আপনি অবজেক্টের প্রাইভেট ডেটা সংরক্ষণ করতে চান বা যখন আপনি অবজেক্টের কিছু স্টেট বা মেটাডেটা সংরক্ষণ করতে চান, যেগুলি অন্য কোনো স্থানে অ্যাক্সেস করা উচিত নয়।
উদাহরণ:
// একটি WeakMap তৈরি করা
let weakMap = new WeakMap();
// দুটি অবজেক্ট তৈরি করা
let obj1 = { name: "Alice" };
let obj2 = { name: "Bob" };
// WeakMap এ অবজেক্টের জন্য প্রাইভেট ডেটা যোগ করা
weakMap.set(obj1, { age: 25, city: "New York" });
weakMap.set(obj2, { age: 30, city: "Los Angeles" });
// অবজেক্টের প্রাইভেট ডেটা পাওয়া
console.log(weakMap.get(obj1)); // Output: { age: 25, city: "New York" }
console.log(weakMap.get(obj2)); // Output: { age: 30, city: "Los Angeles" }
// অবজেক্টের সাথে সম্পর্কিত ডেটা চেক করা
console.log(weakMap.has(obj1)); // Output: true
console.log(weakMap.has(obj2)); // Output: true
// অবজেক্ট মুছে ফেলা
weakMap.delete(obj1);
console.log(weakMap.has(obj1)); // Output: false
এখানে:
set()মেথডের মাধ্যমে দুটি অবজেক্টের জন্য প্রাইভেট ডেটা সংরক্ষণ করা হয়েছে।get()মেথড ব্যবহার করে অবজেক্টের প্রাইভেট ডেটা অ্যাক্সেস করা হয়েছে।delete()মেথড ব্যবহার করে অবজেক্টটি মুছে ফেলা হয়েছে এবংhas()দিয়ে চেক করা হয়েছে যে অবজেক্টটি এখনওWeakMapএ রয়েছে কি না।
WeakMap এর সুবিধা
- গার্বেজ কালেকশন:
WeakMapএর কী গুলো যখন আর ব্যবহৃত হয় না, তখন তা গার্বেজ কালেকশনের মাধ্যমে মুছে যায়, ফলে মেমরি ব্যবস্থাপনা সহজ হয়। - Private Data: অবজেক্টের প্রাইভেট ডেটা সংরক্ষণ করতে ব্যবহার করা যায়, যেখানে অন্য কোথাও এই ডেটা অ্যাক্সেস করা যাবে না।
- Memory Efficiency: এটি মেমরি দক্ষ এবং সময়ের সাথে অবজেক্ট গুলো অপ্রয়োজনীয় হলে মুছে ফেলে, যাতে স্মৃতি অপচয় না হয়।
WeakMap এর সীমাবদ্ধতা
- Enumeration করা যায় না: আপনি
WeakMapএর উপাদানগুলোর উপর enumeration করতে পারবেন না। এটি কোনওforEach()বাfor...ofলুপের মাধ্যমে অ্যাক্সেস করা যাবে না। - Keys হিসেবে অবজেক্টই ব্যবহার করতে হবে:
WeakMapএ কী হিসেবে কেবল অবজেক্ট ব্যবহার করা যেতে পারে, প্রিমিটিভ ভ্যালু (যেমন: string, number) ব্যবহার করা যাবে না।
WeakMap ব্যবহার কেস
WeakMap সাধারণত ব্যবহৃত হয় যেখানে প্রাইভেট ডেটা সংরক্ষণ করা প্রয়োজন এবং সেই ডেটার সাথে সম্পর্কিত অবজেক্ট গুলি যখন আর ব্যবহৃত না হলে সেগুলি মুছে ফেলা উচিত। এর সবচেয়ে ভালো ব্যবহার ক্ষেত্র হল, যেমন DOM এলিমেন্টের সাথে মেটাডেটা সংরক্ষণ বা ক্লাস ভিত্তিক অবজেক্টে প্রাইভেট প্রপার্টি তৈরি করা।
সারাংশ
WeakMap ES6 এর একটি শক্তিশালী ডেটা স্ট্রাকচার যা অবজেক্টের প্রপার্টি কীগুলোর জন্য একক (unique) রেফারেন্স ব্যবহার করে। এটি গার্বেজ কালেকশনের মাধ্যমে মেমরি ব্যবস্থাপনা সহজ করে এবং অবজেক্টের প্রাইভেট ডেটা সংরক্ষণে সহায়তা করে। তবে এর কিছু সীমাবদ্ধতাও রয়েছে, যেমন, enumeration সম্ভব নয় এবং কী হিসেবে শুধুমাত্র অবজেক্ট ব্যবহার করা যাবে।
Read more