ES6 তে WeakMap এবং WeakSet দুটি নতুন ডেটা স্ট্রাকচার যোগ করা হয়েছে। এগুলি সাধারণ Map এবং Set এর মতো কাজ করে, তবে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে, যা এগুলিকে বিশেষ করে তোলে। WeakMap এবং WeakSet মূলত মেমরি ম্যানেজমেন্টের জন্য ডিজাইন করা হয়েছে, যেখানে তাদের উপাদানগুলি Garbage Collection এর আওতায় থাকে।
1. WeakMap কী?
WeakMap একটি Map এর মতো কাজ করে, তবে এর মধ্যে কীগুলির জন্য Weak References ব্যবহৃত হয়। এর মানে হল যে, WeakMap এ সংরক্ষিত কী গুলি যদি আর রেফারেন্স না থাকে (যেমন, তাদের কোনো অন্য রেফারেন্স মেমরিতে না থাকে), তবে গার্বেজ কালেকশন (Garbage Collection) তাদের মেমরি থেকে মুক্ত করতে পারে।
বৈশিষ্ট্য:
- Keys must be objects (primitive values cannot be used as keys).
- Garbage collection friendly: যদি কোনো কী আর রেফারেন্স না থাকে, তবে সেই কী এবং তার মানকে গার্বেজ কালেকশন (GC) স্বয়ংক্রিয়ভাবে মুছে ফেলবে।
- No enumeration: WeakMap এর উপাদানগুলোকে
forEach()বা অন্যান্য ইটারেটর মেথড দ্বারা এনুমারেট (enumerate) করা যায় না।
উদাহরণ:
let weakMap = new WeakMap();
let obj = {};
weakMap.set(obj, 'value');
console.log(weakMap.get(obj)); // 'value'
obj = null; // obj is now eligible for garbage collection
// weakMap no longer holds a reference to obj
এখানে, obj কীটি WeakMap এ সংরক্ষিত ছিল এবং পরে সেটিকে null করা হয়েছে, যার ফলে গার্বেজ কালেকশন স্বয়ংক্রিয়ভাবে এটি মুছে ফেলতে পারবে।
2. WeakSet কী?
WeakSet একটি Set এর মতো কাজ করে, তবে এর মধ্যে Weak References ব্যবহৃত হয়। অর্থাৎ, WeakSet তে সংরক্ষিত যে কোনো অবজেক্ট গার্বেজ কালেকশনের মাধ্যমে মুছে ফেলা যেতে পারে যদি তাদের কোনো অন্য রেফারেন্স না থাকে। WeakSet এর উপাদানগুলি শুধুমাত্র অবজেক্ট হতে পারে, এবং এর মধ্যে কোনো প্রিমিটিভ ভ্যালু (যেমন স্ট্রিং বা নাম্বার) রাখা সম্ভব নয়।
বৈশিষ্ট্য:
- Elements must be objects (primitive values cannot be used).
- Garbage collection friendly: অবজেক্ট যদি আর কোথাও রেফারেন্স না থাকে, তবে গার্বেজ কালেকশন সেগুলো মুছে ফেলতে পারে।
- No enumeration: WeakSet এর উপাদানগুলোকে
forEach()বা অন্যান্য ইটারেটর মেথড দ্বারা এনুমারেট (enumerate) করা যায় না।
উদাহরণ:
let weakSet = new WeakSet();
let obj1 = {};
let obj2 = {};
weakSet.add(obj1);
weakSet.add(obj2);
console.log(weakSet.has(obj1)); // true
obj1 = null; // obj1 is now eligible for garbage collection
// weakSet no longer holds a reference to obj1
এখানে, obj1 এবং obj2 দুটি অবজেক্ট WeakSet তে যোগ করা হয়েছিল। পরবর্তীতে, obj1 কে null করা হয়েছে, যার ফলে এটি গার্বেজ কালেকশন দ্বারা মুছে ফেলা হতে পারে।
3. WeakMap এবং WeakSet এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | WeakMap | WeakSet |
|---|---|---|
| কী বা উপাদান | Objects only (primitives cannot be used as keys) | Objects only (primitives cannot be used) |
| গার্বেজ কালেকশন | Enabled: যদি key আর রেফারেন্স না থাকে, সেটি গার্বেজ কালেকশনে চলে যাবে | Enabled: যদি object আর রেফারেন্স না থাকে, সেটি গার্বেজ কালেকশনে চলে যাবে |
| এনুমারেশন (Enumeration) | Not supported: Cannot be enumerated with forEach or for...of | Not supported: Cannot be enumerated with forEach or for...of |
| প্রোপার্টি এবং মান | Has keys and values: A key-value pair | Has only values (objects): Stores unique objects |
4. WeakMap এবং WeakSet এর ব্যবহার কেন গুরুত্বপূর্ণ?
- Memory Efficiency: WeakMap এবং WeakSet ব্যবহার করে আপনি এমন ডেটা স্ট্রাকচার তৈরি করতে পারেন যা মেমরি ব্যবস্থাপনায় আরও কার্যকর। যখন কোনো অবজেক্ট আর রেফারেন্সে থাকে না, তখন গার্বেজ কালেকশন তার মেমরি মুক্ত করে দেবে, ফলে মেমরি লিক (memory leak) কমে যাবে।
- Private Data: WeakMap ব্যবহার করে আপনি অবজেক্টের প্রাইভেট ডেটা সংরক্ষণ করতে পারেন। কারণ WeakMap এর কীগুলি গার্বেজ কালেকশনে চলে যেতে পারে এবং সেগুলি সাধারণভাবে Enumeration করা যায় না, এটি নিরাপত্তার জন্য কার্যকর হতে পারে।
উপসংহার
WeakMap এবং WeakSet এস6 এ নতুন ডেটা স্ট্রাকচার যা মেমরি ব্যবস্থাপনা এবং ডেটা প্রাইভেসি সংরক্ষণে কার্যকর ভূমিকা পালন করে। এগুলি সাধারণ Map এবং Set এর মতো কাজ করলেও, তাদের মেমরি ম্যানেজমেন্টের জন্য দুর্দান্ত সুবিধা রয়েছে।
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 এর মাধ্যমে আপনি একাধিক অবজেক্টের মধ্যে সম্পর্ক তৈরি করতে পারেন, তবে এগুলোর মধ্যে মেমরি ব্যবস্থাপনার সুবিধাগুলি হালকা ও স্মার্টভাবে কাজ করে।
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 সম্ভব নয় এবং কী হিসেবে শুধুমাত্র অবজেক্ট ব্যবহার করা যাবে।
WeakSet ES6 এর একটি নতুন ডেটা স্ট্রাকচার যা non-primitive values (অবজেক্ট, অ্যারে, ফাংশন, ইত্যাদি) সংরক্ষণের জন্য ব্যবহৃত হয়। এটি একটি বিশেষ ধরনের সেট, যেখানে শুধুমাত্র অবজেক্ট টাইপের ডেটা রাখা যায়। এর প্রধান বৈশিষ্ট্য হল, এটি weak references ব্যবহার করে, যার ফলে garbage collection এর সময় অপ্রয়োজনীয় অবজেক্টগুলো অটোমেটিক্যালি মুছে যায়।
WeakSet এর বৈশিষ্ট্য
- Non-primitive values:
WeakSetশুধুমাত্র অবজেক্ট টাইপের মান সংরক্ষণ করতে পারে। প্রিমিটিভ মান (যেমন string, number, boolean) এখানে রাখা যাবে না। - Weak references:
WeakSetঅবজেক্টগুলোর প্রতি weak reference রাখে। এর মানে, যদি কোনো অবজেক্টWeakSetথেকে রেফারেন্স হারিয়ে ফেলে (অর্থাৎ, যদি সেটি আর কোনো জায়গায় ব্যবহার না হয়), তাহলে গার্বেজ কালেক্টর (garbage collector) এটি মুছে ফেলবে। - No enumeration:
WeakSetএর উপাদানগুলো সরাসরি এক্সেস বা enumerate (loop) করা যায় না। অর্থাৎ, আপনি একটিWeakSetএর উপাদানগুলো ইটারেট (loop) করতে পারবেন না, যা সাধারণSetএর ক্ষেত্রে করা যায়।
WeakSet এর সিনট্যাক্স
let weakSet = new WeakSet([iterable]);
- iterable (ঐচ্ছিক): একটি অ্যারে বা অন্য কোনো iterable অবজেক্ট, যার উপাদানগুলি
WeakSetএ যোগ করা যাবে।
WeakSet এর প্রধান মেথডগুলো
add(value): একটি অবজেক্টWeakSetএ যোগ করে।delete(value): একটি অবজেক্টWeakSetথেকে মুছে ফেলে।has(value): চেক করে যে কোনো অবজেক্টWeakSetএ রয়েছে কিনা।
WeakSet এর ব্যবহার
উদাহরণ 1: অবজেক্ট সংরক্ষণ
let obj1 = { name: "John" };
let obj2 = { name: "Jane" };
let weakSet = new WeakSet();
weakSet.add(obj1);
weakSet.add(obj2);
console.log(weakSet.has(obj1)); // true
console.log(weakSet.has(obj2)); // true
এখানে, weakSet এ দুটি অবজেক্ট যোগ করা হয়েছে এবং has() মেথড ব্যবহার করে আমরা চেক করেছি যে এই অবজেক্টগুলো WeakSet এ আছে কিনা।
উদাহরণ 2: গার্বেজ কালেকশন এবং WeakSet
যেহেতু WeakSet weak references ব্যবহার করে, এর মানে হলো, যদি কোনো অবজেক্ট অন্য কোনো জায়গায় রেফারেন্স হারিয়ে ফেলে, তা হলে সেটি WeakSet থেকে স্বয়ংক্রিয়ভাবে মুছে যাবে। গার্বেজ কালেক্টরের সাহায্যে এটি হয়ে থাকে।
let obj1 = { name: "John" };
let weakSet = new WeakSet();
weakSet.add(obj1);
// obj1 কে null করে দিলে, গার্বেজ কালেক্টর অবজেক্টটি মুছে ফেলবে
obj1 = null;
// গার্বেজ কালেক্টর কাজ করার পরে, weakSet এ obj1 আর থাকবে না
console.log(weakSet.has(obj1)); // false
এখানে, যখন obj1 কে null দিয়ে দেয়া হয়, তখন WeakSet থেকে স্বয়ংক্রিয়ভাবে obj1 মুছে যায়, কারণ এর আর কোনো রেফারেন্স নেই।
WeakSet এবং Set এর মধ্যে পার্থক্য
| ফিচার | WeakSet | Set |
|---|---|---|
| ধরন | শুধুমাত্র অবজেক্ট সংরক্ষণ করা যায় | সব ধরনের মান (primitive এবং non-primitive) সংরক্ষণ করা যায় |
| Enumeration | ইটারেশন বা enumeration সম্ভব নয় | ইটারেশন সম্ভব |
| Garbage Collection | অবজেক্টগুলোর রেফারেন্স হারালে তা গার্বেজ কালেক্টরের মাধ্যমে মুছে যায় | অবজেক্টগুলো গার্বেজ কালেক্টর দ্বারা মুছে যায় না |
| প্রতিলিপি (Copying) | WeakSet এর কোনো প্রতিলিপি (clone) করা যায় না | Set এর প্রতিলিপি (clone) করা যায় |
WeakSet এর ব্যবহার কেন গুরুত্বপূর্ণ?
- Garbage Collection:
WeakSetঅবজেক্টগুলোর প্রতি weak reference রাখে, যা গার্বেজ কালেক্টরের মাধ্যমে অপ্রয়োজনীয় অবজেক্টগুলোকে অটোমেটিক্যালি মুছে ফেলতে সহায়তা করে। - Private Data:
WeakSetঅবজেক্টের প্রাইভেট ডেটা সংরক্ষণ করার জন্য উপকারী, যেহেতু বাইরের কোড এই অবজেক্টগুলোর উপাদান দেখতে বা মডিফাই করতে পারবে না। - Memory Management: যেহেতু অবজেক্টগুলো গার্বেজ কালেক্টর দ্বারা মুছে যায়, এটি স্মৃতি ব্যবস্থাপনার জন্য খুব উপকারী।
সারাংশ
WeakSet একটি বিশেষ ধরনের ডেটা স্ট্রাকচার যা শুধুমাত্র অবজেক্টগুলোর জন্য কাজ করে এবং গার্বেজ কালেকশন সুবিধা প্রদান করে। এটি কেবলমাত্র অবজেক্টগুলোর জন্য উপযোগী এবং ইটারেশন করা যায় না, যা আপনাকে non-primitive values সংরক্ষণের জন্য আরও কার্যকর পদ্ধতি দেয়।
ES6 (ECMAScript 2015) এ WeakMap এবং WeakSet নামক দুটি নতুন ডেটা স্ট্রাকচার যুক্ত হয়েছে। এগুলি Map এবং Set এর মতোই কাজ করে, তবে তাদের মধ্যে কিছু গুরুত্বপূর্ণ পার্থক্য রয়েছে। বিশেষত, WeakMap এবং WeakSet অবজেক্টগুলিকে স্টোর করার সময় garbage collection এর জন্য কিছু অতিরিক্ত সুবিধা প্রদান করে, যার ফলে মেমরি ব্যবস্থাপনা আরও দক্ষ হয়।
WeakMap কী?
WeakMap হলো একটি বিশেষ ধরনের Map (অর্থাৎ key-value জোড়া সংরক্ষণের জন্য একটি ডেটা স্ট্রাকচার), যেখানে শুধুমাত্র অবজেক্টগুলোই key হিসেবে ব্যবহার করা যায়। একটি WeakMap তে রাখা কোনো key-value জোড়া যখন আর কোনো অংশে রেফারেন্স করা হয় না (অর্থাৎ key অবজেক্টটি garbage collection এর মাধ্যমে মুছে ফেলা হয়), তখন সেই key-value জোড়া আপনি অ্যাক্সেস করতে পারবেন না, এবং এটি মেমরি থেকে সাফ হয়ে যাবে। এটি মেমরি ব্যবস্থাপনা আরও দক্ষ করে তোলে।
WeakMap এর সিনট্যাক্স
const weakMap = new WeakMap();
let obj1 = { name: 'John' };
let obj2 = { name: 'Alice' };
weakMap.set(obj1, 'Developer');
weakMap.set(obj2, 'Designer');
console.log(weakMap.get(obj1)); // 'Developer'
console.log(weakMap.get(obj2)); // 'Designer'
// যদি obj1 আর কোথাও রেফারেন্স না হয়
obj1 = null; // obj1 তে আর কোনো রেফারেন্স না থাকলে
// WeakMap এ obj1 এর সাথে সম্পর্কিত key-value জোড়া মুছে যাবে (garbage collection)
এখানে, obj1 এবং obj2 হলো অবজেক্ট, যা WeakMap এর key হিসেবে ব্যবহৃত হয়েছে। যখন obj1 কে null করা হয়, তখন WeakMap এর মধ্যে obj1 এর সাথে সম্পর্কিত key-value জোড়া মুছে যায়।
WeakMap এর সুবিধা
- Garbage Collection: যখন key অবজেক্টটি আর ব্যবহৃত হয় না, তখন WeakMap স্বয়ংক্রিয়ভাবে ওই entry মুছে দেয়, মেমরি ব্যবস্থাপনাকে আরও উন্নত করে।
- Key হিসেবে শুধুমাত্র অবজেক্ট: WeakMap তে primitive values (যেমন string, number ইত্যাদি) key হিসেবে ব্যবহার করা যায় না, শুধুমাত্র অবজেক্টই key হিসেবে ব্যবহার করা সম্ভব।
- Performance: অন্যান্য মানের তুলনায় WeakMap তে কম মেমরি ব্যবহার হয় কারণ এটি key-value জোড়া অবজেক্টগুলি গ্যারেজ কালেকশন হলে স্বয়ংক্রিয়ভাবে ক্লিন আপ করে।
WeakSet কী?
WeakSet হলো একটি সেট (set) যা শুধুমাত্র অবজেক্টগুলো সংরক্ষণ করতে পারে। এটি সাধারণ Set এর মতো কাজ করে, কিন্তু এর মধ্যে রাখা কোনো অবজেক্ট যখন আর ব্যবহৃত হয় না, তখন সেট থেকে সেই অবজেক্টটি সরিয়ে ফেলা হয় এবং এটি garbage collection এর জন্য প্রস্তুত হয়। WeakSet মূলত এমন অবজেক্টগুলির জন্য ব্যবহৃত হয় যা আপনি "unique" রাখতে চান এবং যার মেমরি ব্যবস্থাপনা স্বয়ংক্রিয়ভাবে করতে চান।
WeakSet এর সিনট্যাক্স
const weakSet = new WeakSet();
let obj1 = { name: 'John' };
let obj2 = { name: 'Alice' };
weakSet.add(obj1);
weakSet.add(obj2);
console.log(weakSet.has(obj1)); // true
console.log(weakSet.has(obj2)); // true
// যদি obj1 আর কোথাও রেফারেন্স না হয়
obj1 = null; // obj1 তে আর কোনো রেফারেন্স না থাকলে
// WeakSet থেকে obj1 মুছে যাবে (garbage collection)
এখানে, obj1 এবং obj2 দুটি অবজেক্ট WeakSet এ যোগ করা হয়েছে। যখন obj1 কে null করা হয়, তখন সেটটি থেকে obj1 মুছে যাবে।
WeakSet এর সুবিধা
- Garbage Collection: যখন একটি অবজেক্ট WeakSet এর মধ্যে আর ব্যবহৃত না হয়, তখন সেটি মেমরি থেকে মুছে যায়।
- Unique Objects: WeakSet একটি কনটেইনার হিসেবে কাজ করে যেখানে শুধুমাত্র অবজেক্টগুলো রাখার অনুমতি থাকে এবং প্রতিটি অবজেক্টের একটাই ইনস্ট্যান্স রাখা হয় (duplicate অবজেক্ট রাখা যায় না)।
- Memory Efficiency: মেমরি ব্যবস্থাপনার জন্য এটি অনেক উপকারী, কারণ WeakSet এর মাধ্যমে রাখা অবজেক্টগুলি তখনই মুছে যাবে, যখন আর কোনো রেফারেন্স থাকবে না।
WeakMap এবং WeakSet এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | WeakMap | WeakSet |
|---|---|---|
| Key-Value Pair | হ্যাঁ, WeakMap key-value জোড়া সংরক্ষণ করে | না, WeakSet শুধুমাত্র অবজেক্ট সংরক্ষণ করে |
| Key Type | শুধুমাত্র অবজেক্ট (objects) | শুধুমাত্র অবজেক্ট (objects) |
| Garbage Collection | key-value জোড়া মুছে যায় যখন key আর রেফারেন্স থাকে না | অবজেক্ট মুছে যায় যখন সেটের বাইরে কোনো রেফারেন্স থাকে না |
| Usage | অবজেক্টের সাথে সম্পর্কিত ডেটা সংরক্ষণ করতে ব্যবহৃত হয় | ইউনিক অবজেক্টগুলো সংরক্ষণ করার জন্য ব্যবহৃত হয় |
WeakMap এবং WeakSet এডভান্সড ডেটা স্ট্রাকচার যা garbage collection ব্যবস্থাপনা করে এবং মেমরি ব্যবস্থাপনায় কার্যকরী সহায়ক হতে পারে। এগুলি যখন আপনি ডাইনামিকভাবে অবজেক্ট এবং তার সাথে সম্পর্কিত ডেটা বা অবজেক্টের ইউনিক অবস্থান রাখতে চান, তখন ব্যবহৃত হয়। WeakMap এবং WeakSet সাধারণত উচ্চ পারফরম্যান্স এবং মেমরি ব্যবস্থাপনায় সহায়ক হতে পারে, বিশেষত বড় অ্যাপ্লিকেশনগুলির জন্য।
Read more