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 সংরক্ষণের জন্য আরও কার্যকর পদ্ধতি দেয়।
Read more