Well-known Symbols এবং তাদের ব্যবহার

Symbols - জাভাস্ক্রিপ্ট ইএস৬ (ES6) - Web Development

317

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 এর তালিকা:

  1. Symbol.iterator
    এটি iterable অবজেক্টগুলোর জন্য ব্যবহৃত হয়, যা for...of লুপের সাথে কাজ করে।
  2. Symbol.asyncIterator
    এটি asynchronous iteration এর জন্য ব্যবহৃত হয়। এটি async iterator তৈরি করার জন্য প্রয়োজনীয় একটি symbol।
  3. Symbol.hasInstance
    এটি একটি কাস্টম instanceof চেক করার জন্য ব্যবহৃত হয়, যেটি একটি অবজেক্টের prototype চেক করে।
  4. Symbol.toPrimitive
    এটি একটি কাস্টম toPrimitive কনভার্সন মেথড তৈরি করতে ব্যবহৃত হয়, যাতে আপনি নিজে কিভাবে আপনার অবজেক্টের primitive (string, number ইত্যাদি) মান পাবেন তা কাস্টমাইজ করতে পারেন।
  5. Symbol.toStringTag
    এটি Object.prototype.toString() মেথডের ফলাফল কাস্টমাইজ করতে ব্যবহৃত হয়। এটি একটি object এর type নির্ধারণ করতে সাহায্য করে।
  6. Symbol.match
    এটি String.prototype.match() মেথডের behavior কাস্টমাইজ করতে ব্যবহৃত হয়।
  7. Symbol.replace
    এটি String.prototype.replace() মেথডের behavior কাস্টমাইজ করতে ব্যবহৃত হয়।
  8. Symbol.search
    এটি String.prototype.search() মেথডের behavior কাস্টমাইজ করতে ব্যবহৃত হয়।
  9. Symbol.split
    এটি String.prototype.split() মেথডের behavior কাস্টমাইজ করতে ব্যবহৃত হয়।
  10. 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 পদ্ধতি তৈরি করতে এবং কাস্টম কনভার্সন সিস্টেম তৈরি করতে পারেন। এগুলোর মাধ্যমে কোড আরও শক্তিশালী, ফ্লেক্সিবল এবং রিডেবল হয়।

Content added By
Promotion

Are you sure to start over?

Loading...