TypeScript আপনাকে টাইপ সেফ কলব্যাকস (callbacks) এবং প্রমিসেস (Promises) ব্যবহারের সুবিধা প্রদান করে, যা কোডের সঠিকতা নিশ্চিত করতে এবং ডেভেলপমেন্টের সময় বিভিন্ন ধরনের ভুল কমাতে সাহায্য করে। কলব্যাকস এবং প্রমিসেস এমন দুইটি কৌশল যা অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ে ব্যবহৃত হয়, এবং TypeScript এর টাইপ সিস্টেমের মাধ্যমে এসবের জন্য টাইপ সেফটি নিশ্চিত করা যায়।
১. টাইপ সেফ কলব্যাকস (Type-safe Callbacks)
কলব্যাক ফাংশনগুলি এমন ফাংশন, যেগুলি অন্য ফাংশনকে আর্গুমেন্ট হিসেবে পাঠানো হয় এবং নির্দিষ্ট সময়ের পর কল করা হয়। টাইপ সেফ কলব্যাকস নিশ্চিত করে যে আপনার কলব্যাক ফাংশন সঠিক টাইপের আর্গুমেন্ট গ্রহণ করছে এবং সঠিক রিটার্ন টাইপ প্রদান করছে।
কলব্যাক ফাংশনের উদাহরণ:
function fetchData(url: string, callback: (data: string) => void): void {
setTimeout(() => {
callback("Data fetched from " + url);
}, 1000);
}
fetchData("https://api.example.com", (data) => {
console.log(data); // "Data fetched from https://api.example.com"
});
এখানে fetchData ফাংশনে একটি কলব্যাক ফাংশন পাস করা হয়েছে, যা string টাইপের data আর্গুমেন্ট গ্রহণ করে এবং void রিটার্ন করে। TypeScript এর টাইপ সিস্টেম এই কলব্যাকের আর্গুমেন্ট এবং রিটার্ন টাইপের সঠিকতা নিশ্চিত করে।
টাইপ সেফ কলব্যাক সিস্টেমের উন্নত উদাহরণ:
আপনি যদি একটি জেনেরিক টাইপ ব্যবহার করতে চান, তাহলে কলব্যাকের জন্য একটি টাইপ অ্যালিয়াস বা ইন্টারফেস তৈরি করতে পারেন। এটি কোডকে আরও নমনীয় এবং পুনঃব্যবহারযোগ্য করে তোলে।
type Callback<T> = (data: T) => void;
function processData<T>(data: T, callback: Callback<T>): void {
callback(data);
}
processData(42, (data) => {
console.log(`Received data: ${data}`); // "Received data: 42"
});
processData("Hello, world!", (data) => {
console.log(`Received data: ${data}`); // "Received data: Hello, world!"
});
এখানে Callback<T> টাইপটি জেনেরিকভাবে তৈরি করা হয়েছে, যা যে কোনো টাইপের data গ্রহণ করতে পারে। processData ফাংশনটিও T টাইপের data গ্রহণ করে এবং তার সাথে টাইপ সেফ কলব্যাক ব্যবহার করে।
২. টাইপ সেফ প্রমিসেস (Type-safe Promises)
Promises JavaScript এবং TypeScript এ অ্যাসিঙ্ক্রোনাস অপারেশনগুলি পরিচালনা করার জন্য ব্যবহৃত হয়। TypeScript-এ, আপনি প্রমিসেসের টাইপ সেফটি নিশ্চিত করতে পারেন যাতে প্রমিস রেজাল্ট এবং এর পরবর্তী .then() বা .catch() ব্লকগুলিতে টাইপ ত্রুটি না হয়।
বেসিক প্রমিস উদাহরণ:
function fetchData(url: string): Promise<string> {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Data fetched from " + url);
}, 1000);
});
}
fetchData("https://api.example.com")
.then((data) => {
console.log(data); // "Data fetched from https://api.example.com"
})
.catch((error) => {
console.error(error);
});
এখানে, fetchData ফাংশনটি একটি Promise<string> রিটার্ন করছে, যা string টাইপের ডেটা সম্বলিত প্রমিস রিটার্ন করবে। .then() ব্লকটি সঠিকভাবে টাইপ করা হয়েছে এবং এখানে কোনো টাইপ ত্রুটি হবে না।
জেনেরিক প্রমিস উদাহরণ:
আপনি যদি টাইপ সেফ প্রমিস ব্যবহার করতে চান যা বিভিন্ন টাইপের ডেটার জন্য কাজ করতে পারে, তবে আপনি জেনেরিক টাইপ ব্যবহার করতে পারেন:
function fetchData<T>(url: string): Promise<T> {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(`Data fetched from ${url}` as unknown as T);
}, 1000);
});
}
fetchData<string>("https://api.example.com")
.then((data) => {
console.log(data); // "Data fetched from https://api.example.com"
})
.catch((error) => {
console.error(error);
});
এখানে, fetchData ফাংশনটি জেনেরিকভাবে ডেটার টাইপ T ব্যবহার করে, যা প্রমিস রেজাল্টে টাইপ সেফটি বজায় রাখে।
টাইপ সেফ প্রমিস এবং চেইনিং
TypeScript-এ প্রমিস চেইনিংয়ের সময় টাইপ সেফটি বজায় রাখতে পারেন:
function processData(value: number): Promise<string> {
return new Promise((resolve, reject) => {
if (value < 0) {
reject("Negative number not allowed");
} else {
resolve(`Processed value: ${value}`);
}
});
}
processData(42)
.then((result) => {
console.log(result); // "Processed value: 42"
})
.catch((error) => {
console.error(error);
});
এখানে, processData ফাংশনটি Promise<string> রিটার্ন করে এবং .then() ব্লকে টাইপ সেফ ব্যবহার নিশ্চিত করে। catch ব্লকেও টাইপ সেফটি বজায় রাখা হয়েছে।
৩. কলব্যাকস এবং প্রমিসেসের একত্রিত ব্যবহার
আপনি কলব্যাক এবং প্রমিসেস একসাথে ব্যবহার করতে পারেন, যেমন অ্যাসিঙ্ক্রোনাস কলব্যাকস। উদাহরণস্বরূপ, একটি প্রমিস রিটার্ন করা ফাংশনে কলব্যাক ব্যবহারের উদাহরণ:
function fetchData(url: string): Promise<string> {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(`Data fetched from ${url}`);
}, 1000);
});
}
function processData(callback: (data: string) => void): void {
fetchData("https://api.example.com")
.then((data) => {
callback(data); // কলব্যাকে টাইপ সেফ ডেটা পাঠানো হচ্ছে
})
.catch((error) => {
console.error(error);
});
}
processData((data) => {
console.log(data); // "Data fetched from https://api.example.com"
});
এখানে, fetchData একটি প্রমিস রিটার্ন করে এবং processData ফাংশন কলব্যাকের মাধ্যমে ডেটা প্রক্রিয়া করছে।
৪. সারাংশ
TypeScript-এ টাইপ সেফ কলব্যাকস এবং প্রমিসেস ব্যবহার করে আপনি অ্যাসিঙ্ক্রোনাস কোডে টাইপ সঠিকতা নিশ্চিত করতে পারেন। কলব্যাকস ব্যবহার করে সঠিক আর্গুমেন্ট এবং রিটার্ন টাইপ নিশ্চিত করা সম্ভব, এবং প্রমিসেস ব্যবহারের মাধ্যমে আপনি অ্যাসিঙ্ক্রোনাস অপারেশনগুলি সঠিকভাবে টাইপ করে ত্রুটি কমাতে পারেন। জেনেরিক টাইপস ব্যবহার করে আপনি আরও নমনীয় এবং পুনঃব্যবহারযোগ্য কলব্যাকস এবং প্রমিসেস তৈরি করতে পারবেন।
Read more