2.5 ফাংশন এবং অবজেক্ট
প্রোগ্রামিং জগতে ফাংশন অত্যন্ত গুরুত্বপূর্ণ একটা জিনিস মোটামুটি সকল প্রোগ্রামিং ল্যাঙ্গুয়েজে-এ ফাংশনের মূল কনসেপ্ট বা ধারণাটা একই। আমরা জাভাস্ক্রিপ্ট এ শিখেছি যে ফাংশন কোন একটা ইন্সট্রাকশন এর উপর ভিত্তি করে কাজ করে এবং সেখান থেকে আমরা কোন একটা কিছু রিটার্ন করতে পারি।
এখন টাইপস্ক্রিপ্টে ফাংশন আমরা কিভাবে ব্যবহার করবো বা ফাংশন ব্যবহারের জন্য কি কি রুলস ফলো করতে হবে সেগুলো নিয়ে আলোচনা করবো।
আমরা ইতিমধ্যেই ফাংশন কিভাবে লিখতে হয় তা জেনেছি। চলুন একটা উদাহরণ দিয়ে শুরু করি। ধরুন আমরা একটা ফাংশন লিখবো যেটা আসলে দুইটা নাম্বারের উপর বিভিন্ন অপারেশন করবে,
const calculateNumber = (num1: number, num2: number): number => {
let sum: number = num1 + num2;
return sum;
}
const result = calculateNumber(10,20); // call function
console.log(result);
//output 30
এখানে আমরা একটা অ্যারো ফাংশন লিখেছি এবং ফাংশনের প্যারামিটার হিসাবে দুটি নাম্বার একসেপ্ট করেছি এবং নাম্বার দুটিকে যোগ করে রিটার্ন করছি, এখন কিছু জিনিস এখানে লক্ষ্য করুন আমরা num1: number এবং num2: number প্যারামিটার দুটি লেখার সময় বলে দিয়েছি যে যে ভ্যালু দুটি দেয়া হবে সেটা যেন নাম্বার টাইপ হয় আবার দেখুন আমরা ফাংশনের রিটার্ন টাইপও বলে দিয়েছি যে নাম্বার দুটি অপারেশন করার পর আমাকে একটা নাম্বার রিটার্ন করবা।
এখন ফাংশন কল করার সময় প্রথম প্যারামিটার যদি আমরা নাম্বার না দিয়ে কোন স্ট্রিং ভ্যালু পাঠাই তাহলে টাইপস্ক্রিপ্ট কম্পাইল টাইমেই এরর দেখাবে।
const calculateNumber = (num1: number, num2: number): number=>{
let sum: number = num1 + num2;
return sum;
}
calculateNumber("10",20); // error: Argument of type 'string' is not assignable to parameter of type 'number'.
আবার আমরা যদি চাই ফাংশনটি আমাদের কোন কিছু রিটার্ন করবে না তাহলে আমাদের ফাংশনের রিটার্ন টাইপ ও void হিসেবে বলে দিতে হবে
const printName = (name: string): void=>{
console.log('My Name is: ', name)
}
printName('Mahmudul Hasan');
//output
My Name is Mahmudul Hasan
তাহলে আমরা যা বুঝলাম, কোন ফাংশন লেখার সময় যদি সেই ফাংশন এর রিটার্ন টাইপ বলে দেই বা ফাংশনের প্যারামিটার টাইপ ডিফাইন করে দেই, তাহলে আমাদের কোড এ খুব কম ভুল হবে বা কোড লেখার সময় কনফিউশন তৈরী হবে না তাই বেস্ট প্রাক্টিস হল টাইপ ডিফাইন করে নেওয়া।
অবজেক্ট
অবজেক্ট হল জাভাস্ক্রিপ্ট এ একটি ডায়নামিক নন-প্রিমিটিভ ডাটা টাইপ। ডায়নামিক বলার কারন হচ্ছে আমরা চাইলেই অবজেক্ট এ যেকোন ডাটা অ্যাড করতে পারি।
যেমনঃ
let person = {
id: 1
}
person.name = 'Mahmudul Hasan'
console.log(person)
//output
person: {
id: 1, // number type
name: 'Mahmudul Hasan' // string type
}
এটা জাভাস্ক্রিপ্ট এর ভ্যালিড একটি কোড, কারন আমরা person অবজেক্ট-এ একটা নতুন name প্রোপার্টি অ্যাড করে এর ভ্যালু অ্যাসাইন করেছি।
কিন্তু টাইপস্ক্রিপ্ট এ যদি একই কাজটি করতে চাই তাহলে কম্পাইল টাইম এরর দেখাবে,
//error
Property 'name' does not exist on type '{ id: number; }'
এটার কারন হল আমরা যখন টাইপস্ক্রিপ্টে কোন অবজেক্ট ডিফাইন করি এবং এর প্রোপার্টি হিসাবে যদি ইনিশিয়ালি কিছু অ্যাড করে দেই তাহলে ঐ অবজেক্ট টি তার টাইপ হিসাবে ডিফাইন করে নেয়, যেমনটা উপরে হয়েছে, সেজন্য person তার প্রোপার্টি হিসাবে name কে খুজে পাচ্ছেনা।
// typescript
let person : { id: number, age: number, name: string }= {
id: 1,
age: 28,
name: ''
}
person.name = 'Mahmudul Hasan'
এখন আমরা চাইলে person অবজেক্টের প্রোপার্টিস মডিফাই করতে পারবো। আমরা person অবজেক্ট এর টাইপ ডিফাইন করে বলে দিয়েছি যে, এখানে নির্দিষ্ট কিছু প্রোপার্টিস আছে এবং অন্য প্রোপার্টি অ্যাড করা যাবে না এবং নির্দিষ্ট টাইপ ব্যাতিত অন্য কোন টাইপের ভ্যালু দেয়া যাবে না।