WeakMap এবং WeakSet ES6 (ECMAScript 2015) এ নতুন ডেটা স্ট্রাকচার হিসেবে যোগ করা হয়েছে। এই ডেটা স্ট্রাকচারগুলো সাধারণ Map এবং Set এর মতোই কাজ করে, তবে এদের কিছু বিশেষত্ব রয়েছে যা গারবেজ কালেকশন (Garbage Collection) এবং মেমরি ব্যবস্থাপনায় গুরুত্বপূর্ণ ভূমিকা পালন করে। এই স্ট্রাকচারগুলো "weak" (দুর্বল) কিভাবে কাজ করে, তা বুঝতে হলে তাদের পার্থক্য এবং ব্যবহারের ক্ষেত্রে মেমরি ব্যবস্থাপনার ধারণা বুঝতে হবে।
1. WeakMap কি?
WeakMap হল একটি বিশেষ ধরনের Map (অথবা key-value পেয়ার) যেখানে key গুলি weakly referenced হয়। এর মানে হল যে যদি কোন key আর কোনো রেফারেন্স না পায়, তবে JavaScript Garbage Collector সেই key-value পেয়ারটি মেমরি থেকে সরিয়ে ফেলতে পারে। WeakMap এর মধ্যে key গুলি শুধু অবজেক্ট (objects) হতে পারে, এবং এগুলি মেমরি পরিচালনার জন্য গারবেজ কালেকশন এর সুবিধা দেয়।
WeakMap এর বৈশিষ্ট্য:
- Key গুলি শুধুমাত্র অবজেক্ট হতে পারে, এবং primitive values (যেমন string, number) key হিসেবে ব্যবহার করা যায় না।
- WeakMap এর মধ্যে key-value pair গুলি গারবেজ কালেকশনের দ্বারা মুছে ফেলা হয়, যখন key অব্যবহৃত হয়।
- WeakMap এ কোন মেথড নেই যেমন
sizeবাclear, কারণ এটি গারবেজ কালেকশন ব্যবস্থার সাথে সম্পর্কিত।
উদাহরণ:
let obj = {};
let weakMap = new WeakMap();
// key হিসেবে অবজেক্ট ব্যবহার করা যাবে
weakMap.set(obj, 'Some value');
console.log(weakMap.get(obj)); // Some value
obj = null; // obj আর কোথাও রেফারেন্স করা হচ্ছে না
// এখানে, গারবেজ কালেকটর obj এর জন্য সংরক্ষিত মান মুছে ফেলবে
এখানে, weakMap.set() দ্বারা অবজেক্টের জন্য একটি মান নির্ধারণ করা হয়, এবং যখন অবজেক্ট null করা হয়, তখন গারবেজ কালেকশন স্বয়ংক্রিয়ভাবে এই key-value পেয়ারটি মুছে ফেলবে।
2. WeakSet কি?
WeakSet একটি বিশেষ ধরনের Set যেখানে values গুলি weakly referenced হয়। অর্থাৎ, যদি কোনো value আর কোথাও রেফারেন্স না পায়, তবে WeakSet সেটি মেমরি থেকে মুছে ফেলে। এর মধ্যে শুধুমাত্র অবজেক্টই থাকতে পারে এবং primitive values (যেমন string, number, boolean) রাখা সম্ভব নয়।
WeakSet এর বৈশিষ্ট্য:
- WeakSet এ values গুলি শুধুমাত্র অবজেক্ট হতে পারে।
- এটি কোনো পদ্ধতি বা মেথড প্রদান করে না যা অবজেক্টের সাইজ জানাবে বা এর মধ্যে উপাদান মুছে ফেলবে, কারণ এগুলি গারবেজ কালেকশনের আওতায় আসে।
- একবার কোনো অবজেক্ট গারবেজ কালেকশনের মাধ্যমে মুছে গেলে, তা WeakSet থেকে সরিয়ে ফেলা হয়।
উদাহরণ:
let obj1 = {};
let obj2 = {};
let weakSet = new WeakSet();
weakSet.add(obj1);
weakSet.add(obj2);
console.log(weakSet.has(obj1)); // true
obj1 = null; // obj1 আর কোথাও রেফারেন্স করা হচ্ছে না
// গারবেজ কালেকশনের মাধ্যমে obj1 এর উপাদান মুছে ফেলা হবে
console.log(weakSet.has(obj1)); // false
এখানে, weakSet.add() দিয়ে অবজেক্টগুলি যোগ করা হয়েছে এবং যখন obj1 কে null করা হয়, তখন গারবেজ কালেকশন obj1 কে মুছে ফেলে এবং has() চেক করার পর তা আর পাওয়া যায় না।
WeakMap এবং WeakSet এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | WeakMap | WeakSet |
|---|---|---|
| Key/Value | Key-value পেয়ার (Key হল অবজেক্ট) | শুধুমাত্র Value (Value হল অবজেক্ট) |
| Key Type | Key শুধুমাত্র অবজেক্ট হতে পারে | শুধুমাত্র অবজেক্ট রাখা যায় |
| Garbage Collection | গারবেজ কালেকশনের মাধ্যমে key-value মুছে যায় | গারবেজ কালেকশনের মাধ্যমে value মুছে যায় |
| Size | Size মেথড নেই | Size মেথড নেই |
| Primitive Types | Primitive types key হিসেবে ব্যবহার করা যায় না | Primitive types value হিসেবে ব্যবহার করা যায় না |
| Use Case | Key-value সম্পর্ক স্থাপন, অবজেক্ট সংরক্ষণ | Uniqueness চেক করা, অবজেক্ট集合 গঠন |
সারাংশ
WeakMap এবং WeakSet এর মূল সুবিধা হল যে এগুলো গারবেজ কালেকশন ব্যবস্থার সাথে সংযুক্ত। এগুলোর মাধ্যমে আপনি মেমরি ব্যবস্থাপনা আরও দক্ষভাবে করতে পারবেন, যেখানে অবজেক্টগুলি যখন আর ব্যবহার না হয় তখন তা স্বয়ংক্রিয়ভাবে মুছে যায়। WeakMap এবং WeakSet এর মাধ্যমে আপনি একাধিক অবজেক্টের মধ্যে সম্পর্ক তৈরি করতে পারেন, তবে এগুলোর মধ্যে মেমরি ব্যবস্থাপনার সুবিধাগুলি হালকা ও স্মার্টভাবে কাজ করে।
Read more