ES6 (ECMAScript 2015) এ Well-known Symbols পরিচিত একটি ধারণা, যা বিভিন্ন ইন্টানেল অপারেশন এবং আচরণ নির্ধারণ করতে ব্যবহৃত হয়। এই Symbols গুলি সাধারণত JavaScript ইঞ্জিন দ্বারা ব্যবহৃত হয়, কিন্তু আপনি এগুলিকে কাস্টম ব্যবহারেও কাজে লাগাতে পারেন। Well-known Symbols গুলি একটি ধরনের বিশেষ প্রকারের Symbols যা কিছু নির্দিষ্ট কাজের জন্য ব্যবহার করা হয়, যেমন iteration, toString কনভার্সন, ওবজেক্টের property চেক ইত্যাদি।
Well-known Symbols কী?
Well-known Symbols গুলি মূলত JavaScript এর বিল্ট-ইন behavior বা functionality এর সাথে সম্পর্কিত। এগুলো Symbol অবজেক্টের বিশেষ কনস্ট্যান্ট হিসেবে ব্যবহৃত হয়। এগুলি JavaScript এর বিভিন্ন built-in মেকানিজমকে কাস্টমাইজ বা এক্সটেন্ড করার সুযোগ দেয়।
Well-known Symbols এর তালিকা:
Symbol.iterator
এটি iterable অবজেক্টগুলোর জন্য ব্যবহৃত হয়, যাfor...ofলুপের সাথে কাজ করে।Symbol.asyncIterator
এটি asynchronous iteration এর জন্য ব্যবহৃত হয়। এটি async iterator তৈরি করার জন্য প্রয়োজনীয় একটি symbol।Symbol.hasInstance
এটি একটি কাস্টমinstanceofচেক করার জন্য ব্যবহৃত হয়, যেটি একটি অবজেক্টের prototype চেক করে।Symbol.toPrimitive
এটি একটি কাস্টম toPrimitive কনভার্সন মেথড তৈরি করতে ব্যবহৃত হয়, যাতে আপনি নিজে কিভাবে আপনার অবজেক্টের primitive (string, number ইত্যাদি) মান পাবেন তা কাস্টমাইজ করতে পারেন।Symbol.toStringTag
এটিObject.prototype.toString()মেথডের ফলাফল কাস্টমাইজ করতে ব্যবহৃত হয়। এটি একটি object এর type নির্ধারণ করতে সাহায্য করে।Symbol.match
এটিString.prototype.match()মেথডের behavior কাস্টমাইজ করতে ব্যবহৃত হয়।Symbol.replace
এটিString.prototype.replace()মেথডের behavior কাস্টমাইজ করতে ব্যবহৃত হয়।Symbol.search
এটিString.prototype.search()মেথডের behavior কাস্টমাইজ করতে ব্যবহৃত হয়।Symbol.split
এটিString.prototype.split()মেথডের behavior কাস্টমাইজ করতে ব্যবহৃত হয়।Symbol.unscopables
এটি একটি অবজেক্টের জন্য নির্ধারণ করে যে কোন প্রপার্টি বা মেথডটি with ব্লকের স্কোপে থাকবে না।
Well-known Symbols এর ব্যবহার
1. Symbol.iterator
Symbol.iterator symbol অবজেক্টগুলোকে iterable করে তোলে, যাতে for...of লুপ ব্যবহার করে তাদের উপর iteration করা যায়।
const myArray = [1, 2, 3];
const iterator = myArray[Symbol.iterator]();
console.log(iterator.next()); // { value: 1, done: false }
console.log(iterator.next()); // { value: 2, done: false }
console.log(iterator.next()); // { value: 3, done: false }
console.log(iterator.next()); // { value: undefined, done: true }
এখানে, Symbol.iterator ব্যবহার করে আমরা একটি array তে iterator তৈরি করেছি।
2. Symbol.asyncIterator
এটি asynchronous iteration এর জন্য ব্যবহৃত হয়, যেমন asynchronous data stream বা API call এর ক্ষেত্রে। for await...of লুপ ব্যবহার করে এটি কাজ করে।
const myAsyncArray = {
async *[Symbol.asyncIterator]() {
yield 1;
yield 2;
yield 3;
}
};
(async () => {
for await (const num of myAsyncArray) {
console.log(num); // 1, 2, 3
}
})();
এখানে, Symbol.asyncIterator ব্যবহার করে একটি asynchronous iterable অবজেক্ট তৈরি করা হয়েছে। এই অবজেক্টের উপর for await...of লুপ দিয়ে iteration করা হচ্ছে।
3. Symbol.hasInstance
Symbol.hasInstance ব্যবহার করে আপনি instanceof অপারেটরের behavior কাস্টমাইজ করতে পারেন।
class MyClass {
static [Symbol.hasInstance](instance) {
return instance instanceof Array;
}
}
console.log([] instanceof MyClass); // true
console.log({} instanceof MyClass); // false
এখানে, Symbol.hasInstance এর মাধ্যমে instanceof চেককে কাস্টমাইজ করা হয়েছে, যাতে MyClass এর instance শুধুমাত্র Array হতে পারে।
4. Symbol.toPrimitive
Symbol.toPrimitive ব্যবহার করে আপনি কাস্টম primitive কনভার্সন মেথড তৈরি করতে পারেন।
const myObject = {
value: 42,
[Symbol.toPrimitive](hint) {
if (hint === 'string') {
return `The value is ${this.value}`;
} else {
return this.value;
}
}
};
console.log(String(myObject)); // "The value is 42"
console.log(Number(myObject)); // 42
এখানে, Symbol.toPrimitive ব্যবহার করে myObject এর primitive মান কাস্টমাইজ করা হয়েছে।
5. Symbol.toStringTag
Symbol.toStringTag ব্যবহার করে Object.prototype.toString() মেথডের আউটপুট কাস্টমাইজ করা যায়।
const myObject = {
[Symbol.toStringTag]: 'MyCustomObject'
};
console.log(Object.prototype.toString.call(myObject)); // "[object MyCustomObject]"
এখানে, Symbol.toStringTag ব্যবহার করে toString() মেথডের আউটপুট কাস্টমাইজ করা হয়েছে।
সারাংশ
ES6 এর Well-known Symbols এমন কিছু বিশেষ Symbols যা JavaScript এর ইনবিল্ট মেকানিজম এবং behavior কাস্টমাইজ করতে ব্যবহৃত হয়। এগুলি ব্যবহার করে আপনি বিভিন্ন built-in মেথডগুলোর আচরণ পরিবর্তন করতে, নতুন iteration পদ্ধতি তৈরি করতে এবং কাস্টম কনভার্সন সিস্টেম তৈরি করতে পারেন। এগুলোর মাধ্যমে কোড আরও শক্তিশালী, ফ্লেক্সিবল এবং রিডেবল হয়।
Read more