8.8 Symbols (সিম্বল)
Symbol (সিম্বল) জাভাস্ক্রিপ্টে একটি নতুন প্রিমিটিভ ( primitive ) টাইপ ভ্যারিয়েবল। অবজেক্ট প্রোপারটিস হিসাবে আমরা সবসময় স্ট্রিং ব্যবহার করলেও সিম্বল অবজেক্ট প্রোপারটিস হিসেবে আমাদের কিছু অতিরিক্ত সুবিধা দিচ্ছে। আজকে আমরা তা জানার চেষ্টা করবো।
সিম্বল সম্পর্কে জানার পূর্বে আমাদের জাভাস্ক্রিপ্টের ডাটাটাইপ সম্পর্কে জানতে হবে। জাভাস্ক্রিপ্টে দুই ধরণের ডাটাটাইপ আছে প্রিমিটিভ( primitive ) এবং নন-প্রিমিটিভ(non-primitive)।
প্রিমিটিভ ডাটাটাইপ হলো সিম্পল ভ্যালু টাইপ যেমনঃ string, integer, float, boolean, undefined, null । প্রিমিটিভ ডাটাটাইপ immutable অথবা অপরিবর্তনযোগ্য। প্রিমিটিভ ডাটাটাইপে ভ্যালু রিএসাইন করা যায় কিন্তু পরিবর্তন করা যায় না।
উপর এর কোড ব্লকে x এর ভ্যালু বাড়ানো হয়েছে । দেখে মনে হতে পারে ভ্যালু পরিবর্তন হয়েছে কিন্তু আসলে x এ নতুন ভ্যালু রিএসাইন করা হয়েছে। যদি ভ্যালু সমান থাকে তাহলে দুইটি প্রিমিটিভ ভ্যালু সবসময় ইকুয়াল।
কিন্তু নন-প্রিমিটিভ এর ক্ষেত্রে তা ভিন্ন।
এখন যেহেতু আমরা প্রিমিটিভ এবং নন-প্রিমিটিভ সম্পর্কে বেসিক ধারণা পেয়েছি আমরা সিম্বল কি তা জানার চেষ্টা করি। সিম্বল একটি প্রিমিটিভ ভ্যালু যা একটি অবজেক্টের মতো ব্যবহার করে । প্রতিবার সিম্বলের একটি নতুন ইনস্ট্যান্স তৈরী করলে তার প্রতিটি এক একটি ইউনিক সিম্বল। আবার সিম্বল immutable বা অপরিবর্তনযোগ্য । নিচের উদাহরন তা দেখলে জিনিষটা একটু পরিষ্কার হবে
প্রতিটি সিম্বল ইউনিক। আমরা অপশনাল আর্গুমেন্ট দিয়েও সিম্বল তৈরী করতে পারি।
আমরা অবজেক্টের ‘কি’ হিসেবে সিম্বল ব্যবহার করতে পারি।
সিম্বল প্রপার্টির কলিসন এড়ানোর জন্য অনেক উপকারী। ধরি আমাদের একটা অবজেক্ট আছে Person। দুইটি প্রোগ্রাম Person অব্জেক্টটি মডিফাই করতে চায় এবং Id নামের একটি প্রপার্টি এড করতে চায় । এখন দুইটি প্রোগ্রাম একই নামের প্রপার্টি এড করতে গেলে প্রপার্টি এর ভ্যালু ওভাররাইড বা পরিবর্তন করে ফেলবে । এই সমস্যা আমরা সিম্বল ব্যবহার করে সমাধান করতে পারি। সিম্বল ব্যবহার করে আমরা একটা ইউনিক প্রপার্টি তৈরী করে ব্যবহার করতে পারি।
অন্যকোনো প্রোগ্রাম এখন id নামের সিম্বল ব্যবহার করলেও দুই প্রোগ্রামই তাদের নিজেদের তৈরী সিম্বল ডাটা খুঁজে পাবে।
যদি string প্রপার্টি কী হিসাবে ব্যবহার করা হতো তাহলে ভ্যালু ওভাররাইট হয়ে যেত।
এখানে প্রোগ্রাম-১ id এর ভ্যালু 12 এসাইন করলেও প্রোগ্রাম-২ ভ্যালু চেঞ্জ করে ফেলেছে। প্রোগ্রাম-১ এখন আর id এর প্রত্যাশিত ভ্যালু পাবে না।
-
আমরা যতবার Symbol তৈরী করি, প্রত্যেকবার Symbol একটি নতুন করে তৈরী করে। যার কারণে দুইটার ভ্যালু একই থাকলেও তারা একই হয়না।
-
new কিওয়ার্ড দিয়ে Symbol তৈরী করা যায়না।
-
যদি আমরা Symbol wrapper অবজেক্ট তৈরী করতে চাই, তাহলে Object() ফাংশন ব্যবহার করতে হবে।
-
Symbol-keyed প্রোপার্টিগুলো একেবারেই ইগনোর করা হবে যখন JSON.stringify() ব্যবহার করা হয়।
-
Symbol wrapper অবজেক্টগুলোকে প্রপার্টি হিসেবেও ব্যবহার করা যায়।
-
নিচের কোড স্নিপেটের আউটপুট কি হবে?
- নিচের কোড স্নিপেটের আউটপুট কি হবে?
- নিচের কোড স্নিপেটের আউটপুট কি হবে?
- নিচের কোড স্নিপেটের আউটপুট কি হবে?
- নিচের কোড স্নিপেটের আউটপুট কি হবে?