Unique Identifiers হিসেবে Symbols এর ব্যবহার

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

384

Symbol ES6 এর একটি নতুন ডেটা টাইপ, যা একটি unique identifier (অনন্য শনাক্তকারী) হিসেবে ব্যবহৃত হয়। Symbol দিয়ে আপনি এমন একটি ভ্যালু তৈরি করতে পারেন যা কখনও অন্য কোনো Symbol এর সাথে মিলে না। এটি সাধারণত অবজেক্টের প্রপার্টি কীগুলোর জন্য ব্যবহার করা হয়, বিশেষ করে যখন আপনি চান একটি কীগুলোর নাম সংঘর্ষ (collision) না হোক।

Symbol এর মূল বৈশিষ্ট্য

  • Unque and Immutable: প্রতিটি Symbol মান এক্সট্রা অনন্য এবং পরিবর্তনশীল নয় (immutable)। একইভাবে তৈরি করা দুইটি Symbol কখনোই সমান হবে না, যদিও তাদের ডিসক্রিপশন (description) একই হতে পারে।
  • Hidden Properties: Symbol ব্যবহার করে আপনি অবজেক্টে এমন প্রপার্টি তৈরি করতে পারেন যা বাইরের কোড থেকে সহজে অ্যাক্সেস করা যাবে না, অর্থাৎ এই প্রপার্টিগুলো সিক্রেট বা হিডেন থাকে।

Symbol তৈরি করার সিনট্যাক্স

const mySymbol = Symbol('description');

এখানে, 'description' হচ্ছে ঐ Symbol এর একটি ডিসক্রিপশন, যা শুধুমাত্র Symbol তৈরি করার সময় উপকারি হতে পারে। এটি কোনো মানের মতো কাজ করে না, কিন্তু কোডিং বা ডিবাগিংয়ের জন্য এর ব্যবহার উপকারী হতে পারে।

Symbol এর ব্যবহার

1. প্রপার্টি কীগুলোর জন্য

Symbol কে সাধারণত অবজেক্টের প্রপার্টি কীগুলোর জন্য ব্যবহার করা হয় যাতে কোনো নামের সংঘর্ষ না হয়। বিশেষ করে যখন আপনি আপনার কোডে লায়ব্রেরি বা ফ্রেমওয়ার্ক ব্যবহার করছেন এবং অবজেক্টের কীগুলি বাইরের কোডের সাথে মিশে যেতে পারে।

উদাহরণ:

const uniqueKey = Symbol('uniqueKey');
const obj = {};

obj[uniqueKey] = "This is a unique property";

console.log(obj[uniqueKey]);  // "This is a unique property"

এখানে uniqueKey হচ্ছে একটি Symbol যা obj অবজেক্টের একটি প্রপার্টি হিসেবে ব্যবহার করা হয়েছে। যেহেতু Symbol একটি ইউনিক আইডেন্টিফায়ার, তাই এর মাধ্যমে যে প্রপার্টি তৈরি করা হয়েছে তা অন্য কোনো অবজেক্টের সাথে মিলে যাবে না।

2. অবজেক্টের প্রাইভেট প্রপার্টি হিসেবে

Symbol দিয়ে অবজেক্টের প্রাইভেট প্রপার্টি তৈরি করা যেতে পারে, যাতে বাইরের কোড সরাসরি সেই প্রপার্টিতে অ্যাক্সেস না করতে পারে।

উদাহরণ:

const password = Symbol('password');
const user = {
  name: "Alice",
  [password]: "1234"  // password হচ্ছে একটি প্রাইভেট প্রপার্টি
};

console.log(user.name);        // "Alice"
console.log(user[password]);   // "1234"

এখানে, password একটি Symbol যার মাধ্যমে আমরা user অবজেক্টে একটি প্রাইভেট প্রপার্টি তৈরি করেছি। বাইরের কোড এই প্রপার্টি অ্যাক্সেস করতে পারবে না, যেহেতু password একটি অনন্য আইডেন্টিফায়ার।


Symbol.for() এবং Symbol.keyFor()

ES6 এ Symbol.for() এবং Symbol.keyFor() দুটি নতুন মেথড যোগ করা হয়েছে, যা সিম্বল এর ব্যবহার আরও শক্তিশালী করে।

  • Symbol.for(): এটি একটি গ্লোবাল সিম্বল রেজিস্ট্রি (global symbol registry) তৈরি করে এবং একই নামের সিম্বলটি যদি আগেই তৈরি থাকে তবে সেটি রিটার্ন করে।
  • Symbol.keyFor(): এটি একটি গ্লোবাল সিম্বল এর কিওয়ার্ড (key) রিটার্ন করে।

উদাহরণ:

// Symbol.for() দিয়ে একটি সিম্বল তৈরি করা হচ্ছে
const globalSymbol = Symbol.for('appSettings');

// একই নামের সিম্বল ফেরত দিবে, যদি পূর্বে তৈরি থাকে
const sameGlobalSymbol = Symbol.for('appSettings');

console.log(globalSymbol === sameGlobalSymbol);  // true

// Symbol.keyFor() দিয়ে সিম্বল এর কিওয়ার্ড পাওয়া যাচ্ছে
console.log(Symbol.keyFor(globalSymbol));  // "appSettings"

এখানে, Symbol.for() দিয়ে একটি গ্লোবাল সিম্বল তৈরি করা হয়েছে, এবং এটি একই নামের সিম্বল ফেরত দিবে, যদি আগে থেকে ওই নামের সিম্বল রেজিস্ট্রি থাকে। Symbol.keyFor() দিয়ে গ্লোবাল সিম্বল এর কিওয়ার্ড পাওয়া যায়।


Symbol এর সুবিধা

  1. অনন্য কীগুলি তৈরি করা: Symbol দিয়ে এমন কীগুলি তৈরি করা যায় যা অন্য কোথাও মিলে যাবে না, ফলে অ্যাপ্লিকেশন বা লাইব্রেরির মধ্যে কনফ্লিক্ট (conflict) রোধ করা যায়।
  2. প্রাইভেট প্রপার্টি: Symbol দিয়ে অবজেক্টের প্রাইভেট প্রপার্টি তৈরি করা যায়, যা বাইরের কোডের থেকে নিরাপদ থাকে।
  3. গ্লোবাল সিম্বল রেজিস্ট্রি: Symbol.for() এবং Symbol.keyFor() এর মাধ্যমে গ্লোবাল সিম্বল রেজিস্ট্রি তৈরি করা যায়, যাতে আপনি একাধিক অংশে একই সিম্বল রেজিস্টার এবং ব্যবহার করতে পারেন।

Symbol এর সীমাবদ্ধতা

  1. ইটারেটর হিসাবে ব্যবহার করা যায় না: Symbol প্রপার্টিগুলি ডিফল্টভাবে ইটারেবল বা এনামারেবল (iterable or enumerable) হয় না। অর্থাৎ, আপনি এগুলিকে সাধারণভাবে for...in লুপের মাধ্যমে অ্যাক্সেস করতে পারবেন না।

    উদাহরণ:

    const mySymbol = Symbol('mySymbol');
    const obj = {
      [mySymbol]: "Some value",
      name: "Alice"
    };
    
    for (let key in obj) {
      console.log(key);  // Output: "name"
    }
    

    এখানে, mySymbol প্রপার্টি for...in লুপে দেখানো হয়নি, কারণ এটি একটি Symbol


Symbol একটি শক্তিশালী ফিচার যা কোডে ইউনিক আইডেন্টিফায়ার হিসেবে ব্যবহার করা যায়। এর মাধ্যমে আপনি অবজেক্টের প্রপার্টি কীগুলি নিরাপদভাবে তৈরি করতে পারেন, এবং এগুলিকে বাইরের কোড থেকে অ্যাক্সেস করা কঠিন করে তোলেন। Symbol ব্যবহার করে আপনি অ্যাপ্লিকেশন বা লাইব্রেরির মধ্যে নামের সংঘর্ষ রোধ করতে পারবেন এবং প্রাইভেট ডেটা বা প্রপার্টি তৈরি করতে পারবেন।

Content added By
Promotion

Are you sure to start over?

Loading...