ES6 (ECMAScript 2015) এ Map এবং WeakMap দুটি নতুন ধরনের ডেটা স্ট্রাকচার পরিচিত করা হয়েছে, যা key-value pairs ধারণ করার জন্য ব্যবহৃত হয়। তবে এই দুইটি স্ট্রাকচারের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। এখানে আমরা Map এবং WeakMap এর ব্যবহার এবং পার্থক্য আলোচনা করব।
Map
Map একটি নতুন ডেটা স্ট্রাকচার যা key-value পেয়ার ধারণ করে। এটি একটি ordered collection এবং এতে কোন ধরনের key ব্যবহার করা যায় (এমনকি primitive types বা objects ও হতে পারে)। Map এর প্রপার্টি গুলি অপরিবর্তনীয় (mutable), অর্থাৎ মান পরিবর্তন করা যেতে পারে।
Map এর বৈশিষ্ট্যসমূহ:
- Key হিসেবে primitive types (যেমন string, number) বা objects ব্যবহার করা যায়।
- Insertion order বজায় থাকে, অর্থাৎ যে order এ key-value পেয়ারগুলো ইনসার্ট করা হয়, তা বের করার সময় সেই order অনুসরণ করা হয়।
- Size প্রপার্টি আছে, যা ম্যাপের মধ্যে থাকা key-value পেয়ারগুলোর সংখ্যা জানায়।
- Iteration করা সহজ এবং যে কোন ধরনের iterable (forEach, for-of লুপ, ইত্যাদি) ব্যবহার করা যায়।
Map এর সিনট্যাক্স:
const map = new Map();
// Value set করা
map.set("name", "John");
map.set(1, "One");
map.set(true, "Boolean");
console.log(map.get("name")); // John
console.log(map.get(1)); // One
console.log(map.size); // 3
Map এর উদাহরণ:
const map = new Map();
map.set("name", "Alice");
map.set("age", 25);
console.log(map.has("name")); // true
console.log(map.get("age")); // 25
console.log(map.size); // 2
map.delete("name");
console.log(map.has("name")); // false
console.log(map.size); // 1
এখানে, set() মেথড দিয়ে মান সেট করা হয়েছে, get() দিয়ে মান আনা হয়েছে, has() দিয়ে key উপস্থিত কিনা চেক করা হয়েছে এবং delete() দিয়ে key-value পেয়ার মুছে ফেলা হয়েছে।
WeakMap
WeakMap একটি বিশেষ ধরনের ম্যাপ যেখানে key গুলি objects হতে হবে এবং values যেকোন ধরনের হতে পারে। WeakMap এর সবচেয়ে গুরুত্বপূর্ণ বৈশিষ্ট্য হলো এটি garbage collection এর সঙ্গে কাজ করে। যখন একটি object WeakMap থেকে সরানো হয়, তখন সেটি garbage collect হতে পারে। অন্যদিকে, Map এ কোন key-object থাকলে সেই object garbage collect হতে পারে না, যতক্ষণ না সেটি explicit ভাবে মুছে না ফেলা হয়।
WeakMap এর বৈশিষ্ট্যসমূহ:
- Key হিসেবে শুধু objects ব্যবহার করা যায়, primitive types (যেমন string, number) ব্যবহার করা যাবে না।
- Garbage collection এর সুবিধা: যখন WeakMap থেকে কোনো key সরানো হয়, তখন সেই key এর associated value স্বয়ংক্রিয়ভাবে মুছে যায় এবং garbage collector সেই object কে মুছে দেয়।
- No iteration: WeakMap এ কোন iteration করা সম্ভব নয়। অর্থাৎ, WeakMap এর উপর forEach বা for-of লুপ ব্যবহার করা যাবে না।
- No size property: WeakMap এ size প্রপার্টি নেই, অর্থাৎ আমরা জানি না এতে মোট কয়টি key-value পেয়ার রয়েছে।
WeakMap এর সিনট্যাক্স:
const weakMap = new WeakMap();
const obj1 = {};
const obj2 = {};
weakMap.set(obj1, "value1");
weakMap.set(obj2, "value2");
console.log(weakMap.get(obj1)); // value1
WeakMap এর উদাহরণ:
const weakMap = new WeakMap();
let obj1 = { name: "John" };
let obj2 = { name: "Alice" };
weakMap.set(obj1, "Object 1");
weakMap.set(obj2, "Object 2");
console.log(weakMap.get(obj1)); // "Object 1"
// If obj1 is dereferenced, it will be garbage collected and removed from the WeakMap
obj1 = null;
// After obj1 is set to null, the associated entry will be removed from the WeakMap
console.log(weakMap.get(obj1)); // undefined (because obj1 is garbage collected)
এখানে, obj1 এবং obj2 objects WeakMap এ key হিসেবে ব্যবহৃত হচ্ছে এবং তাদের সাথে সম্পর্কিত value গুলি set() মেথড দিয়ে সেট করা হচ্ছে। যখন obj1 কে null করা হয়েছে, তখন WeakMap থেকে সেই key-value পেয়ার মুছে গেছে এবং get() কল করলে undefined রিটার্ন হয়েছে।
Map এবং WeakMap এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Map | WeakMap |
|---|---|---|
| Key Type | Primitive types এবং Objects উভয়ই হতে পারে | কেবলমাত্র Objects |
| Garbage Collection | No automatic garbage collection | Automatic garbage collection |
| Iteration | Iteration supported | Iteration সম্ভব নয় |
| Size Property | Yes | No |
| Memory Management | Manages memory until explicitly deleted | Automatically manages memory and cleans up unused objects |
কোথায় ব্যবহার করবেন?
- Map: যখন আপনি যে কোনো ধরনের key-value পেয়ার সংগ্রহ করতে চান এবং key গুলি primitive types হতে পারে, অথবা আপনি key-value পেয়ার গুলির উপর iteration করতে চান।
- WeakMap: যখন আপনি objects কে key হিসেবে ব্যবহার করতে চান এবং আপনি চান যে, সেই objects গুলি garbage collection এর মাধ্যমে অটোমেটিক্যালি মুছে যাক, যাতে মেমরি ব্যবস্থাপনা সহজ হয় (যেমন: DOM elements, cache management ইত্যাদি)।
এভাবেই Map এবং WeakMap এর মধ্যে পার্থক্য এবং তাদের ব্যবহার সম্পর্কিত ধারণা তুলে ধরা হলো।
Read more