Vivasoft-logo

3.6 অপশনাল চেইনিং

অপশনাল চেইনিং (?.) হলো একটি অপারেটর যা একটি অবজেক্টের প্রপার্টি এক্সেস বা একটি ফাংশন কল করতে ব্যবহার করা হয়। যদি এই অপারেটর ব্যবহার করে এক্সেস করা অবজেক্টটি undefined বা null হয় তাহলে এক্সপ্রেশনটি এরর থ্রো না করে undefined রিটার্ন করে।

অপশনাল চেইনিং (?.) অপারেটরের সিনট্যাক্স হলো:

				
					 
Obj.val?.prop; //অবজেক্টের প্রপার্টি এক্সেস
array?.[1]; //অ্যারের আইটেম এক্সেস
obj.func?.(args);//ফাংশন কল
				
			

অপশনাল চেইনিং (?.) অপারেটর , (.) চেইনিং অপারেটরের মতই, কিন্তু  (?.) অপারেটর  নালিশ (null or undefined) রেফারেন্সের জন্য এরর না দিয়ে undefined রিটার্ন করে। ফাংশন কলিং এর সময় এটি undefined রিটার্ন করে যদি প্রদত্ত ফাংশন বিদ্যমান না থাকে।

এর ফলে অবজেক্টের রেফারেন্স যদি না থাকার সম্ভাবনা থাকে তাহলেও নেস্টেড প্রপার্টিজগুলো এক্সেস করা যায় খুব সহজ এবং সংক্ষিপ্ত এক্সপ্রেশনের মাধ্যমে।

এখন তাহলে একটা সহজ উদাহরণের মাধ্যমে (.) এবং (?.) চেইনিং অপারেটরের সুবিধা-অসুবিধাগুলো দেখে নেই:

				
					const person = {
  name: 'Kalam',
  age: 40,
  hair: {
    color: 'black',
    style: 'straight',
  },
};


const hairColor = person.hair && person.hair.color;

				
			

person.hair.color-এর মান অ্যাক্সেস করার আগে person.hair-এর মান নন-নাল(এবং নন-undefined) নিশ্চিত করা হয়েছে। person.hair পরীক্ষা না করে সরাসরি person.hair.color অ্যাক্সেস করলে এটি যে এরর ঘটবে তা প্রতিরোধ করে।

অপশনাল চেইনিং অপারেটর (?.) দিয়ে person.hair.color অ্যাক্সেস করার চেষ্টা করার আগে person.hair এর মান আলাদা করে পরীক্ষা করতে হবে না:

				
					const hairColor = person.hair?.color;
				
			

শুধু (.) অপারেটরের পরিবর্তে (?.)অপারেটর ব্যবহার করলে,জাভাস্ক্রিপ্ট person.hair.color অ্যাক্সেস করার চেষ্টা করার আগে person.hair-এর ক্ষেত্রে null অথবা undefined নয় তা নিশ্চিত হতে পরোক্ষভাবে পরীক্ষা করে। যদি person.hair-এর মান null অথবা undefined হয়, এক্সপ্রেশনটি স্বয়ংক্রিয়ভাবে undefined রিটার্ন করে।

অপশনাল চেইনিং দিয়ে ফাংশন কল

কোনো ফাংশনকে কল করার চেষ্টা করার সময় অপশনাল চেইনিং ব্যবহার করা যায়, যেখানে ফাংশনটি নাও থাকতে পারে। ফাংশন কলের সাথে অপশনাল চেইনিং ব্যবহার করলে যদি ফাংশনটি না পাওয়া যায় তাহলে এরর থ্রো করার পরিবর্তে এক্সপ্রেশনটি স্বয়ংক্রিয়ভাবে undefined রিটার্ন করে।

				
					const result = customMethod?.();
				
			

এক্সপ্রেশন লিখতে অপশনাল চেইনিং এর ব্যবহার

অপশনাল চেইনিং (?.) অপারেটর ব্র্যাকেট নোটেশনের সাথে ব্যবহার করা যায়। উদাহরণস্বরূপ:

				
					const nestedProp = obj?.['prop' + 'Name'];
				
			

এটি অ্যারের জন্যেও বিশেষভাবে কার্যকর, যেহেতু অ্যারের ইনডেক্সগুলো ব্র্যাকেট দ্বারা অ্যাক্সেস করা হয়।

				
					function printContent(arr) {
  console.log(arr?.[42]);
}


printContent([0, 1, 2, 3, 4, 5]); // Output: undefined
printContent(); // Output: Error