TypeScript এ কলব্যাক ফাংশন এবং প্রমিসেস দুটি গুরুত্বপূর্ণ কনসেপ্ট যা অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের জন্য ব্যবহৃত হয়। এগুলি আপনাকে কোডের কার্যকারিতা নিয়ন্ত্রণ করতে এবং অ্যাসিঙ্ক্রোনাস অপারেশন সম্পন্ন করার পর একটি নির্দিষ্ট কাজ করতে সহায়তা করে। এই লেখায় কলব্যাক ফাংশন এবং প্রমিসেস এর বিস্তারিত আলোচনা করা হবে।
১. কলব্যাক ফাংশন (Callback Functions)
কলব্যাক ফাংশন হল একটি ফাংশন যা অন্য একটি ফাংশনের আর্গুমেন্ট হিসেবে পাস করা হয় এবং সেই ফাংশনটি সম্পন্ন হওয়ার পর কলব্যাক ফাংশনটি চালানো হয়। এটি অ্যাসিঙ্ক্রোনাস কাজ করতে ব্যবহৃত হয়, যেমনঃ একটি HTTP রিকোয়েস্ট শেষ হওয়ার পর কোন কাজ করা।
উদাহরণ:
function fetchData(callback: (data: string) => void) {
setTimeout(() => {
callback("Data fetched successfully!");
}, 2000);
}
fetchData((data) => {
console.log(data); // আউটপুট: "Data fetched successfully!" ২ সেকেন্ড পর
});
এখানে, fetchData ফাংশনটি একটি কলব্যাক ফাংশন গ্রহণ করে এবং সেটি কিছু সময় পরে কল করে (এখানে setTimeout দিয়ে সিমুলেট করা হয়েছে)। যখন ডেটা ফেচ করা হয়, তখন কলব্যাক ফাংশনটি কাজ করে এবং ডেটা প্রিন্ট হয়।
বিশেষ লক্ষ্য:
- কলব্যাক ফাংশন সাধারনত
voidরিটার্ন টাইপের হয়, কারণ এটি সাধারণত শুধুমাত্র কোন কাজ সম্পন্ন করতে ব্যবহৃত হয়। - টাইপ নিরাপত্তার জন্য কলব্যাক ফাংশনের টাইপ নির্ধারণ করা গুরুত্বপূর্ণ।
২. প্রমিসেস (Promises)
প্রমিস হল একটি অ্যাসিঙ্ক্রোনাস অপারেশন যা ভবিষ্যতে কিছু মান রিটার্ন করবে। এটি একটি অবস্থা ধারণ করে, যা হতে পারে:
- Pending: প্রমিসটি এখনও পূর্ণ হয় নি।
- Resolved: প্রমিস সফলভাবে সম্পন্ন হয়েছে এবং মান রিটার্ন হয়েছে।
- Rejected: প্রমিসটি ব্যর্থ হয়েছে এবং ত্রুটি ঘটেছে।
প্রমিসেস অ্যাসিঙ্ক্রোনাস কাজের ফলাফলকে আরও সহজে পরিচালনা করতে সাহায্য করে।
উদাহরণ:
function fetchData(): Promise<string> {
return new Promise((resolve, reject) => {
setTimeout(() => {
const success = true; // সিমুলেট করা সফলতা
if (success) {
resolve("Data fetched successfully!");
} else {
reject("Failed to fetch data.");
}
}, 2000);
});
}
fetchData()
.then((data) => {
console.log(data); // আউটপুট: "Data fetched successfully!" ২ সেকেন্ড পর
})
.catch((error) => {
console.error(error); // যদি সমস্যা হয়, ত্রুটি দেখাবে
});
এখানে, fetchData ফাংশনটি একটি Promise রিটার্ন করে। এটি resolve বা reject এর মাধ্যমে প্রমিসের ফলাফল প্রদান করে। .then() মেথডটি প্রমিস সফল হলে চালিত হয় এবং .catch() মেথডটি প্রমিস ব্যর্থ হলে ত্রুটি ধরতে ব্যবহৃত হয়।
৩. অ্যাসিঙ্ক/অয়েট (async/await)
async/await হল JavaScript এবং TypeScript এর একটি সিনট্যাক্স যা প্রমিসেসের সাথে কাজ করার আরো সহজ এবং পরিষ্কার পদ্ধতি সরবরাহ করে। async ফাংশনটি একটি প্রমিস রিটার্ন করে এবং await আপনাকে প্রমিসের ফলাফলটি গ্রহণ করতে সক্ষম করে, যেন এটি সিঙ্ক্রোনাস কোডের মতো কাজ করে।
উদাহরণ:
async function fetchData(): Promise<string> {
return new Promise((resolve, reject) => {
setTimeout(() => {
const success = true;
if (success) {
resolve("Data fetched successfully!");
} else {
reject("Failed to fetch data.");
}
}, 2000);
});
}
async function getData() {
try {
const data = await fetchData();
console.log(data); // আউটপুট: "Data fetched successfully!" ২ সেকেন্ড পর
} catch (error) {
console.error(error); // ত্রুটি থাকলে এরকম আউটপুট হবে
}
}
getData();
এখানে fetchData ফাংশনটি একটি প্রমিস রিটার্ন করে, এবং getData ফাংশনে await ব্যবহার করে প্রমিসটি অপেক্ষা করে এবং তারপর ফলাফল গ্রহণ করে। try/catch ব্লক ব্যবহার করে আপনি ত্রুটি ধরতে পারেন।
৪. কলব্যাক বনাম প্রমিসেস
| বৈশিষ্ট্য | কলব্যাক | প্রমিসেস |
|---|---|---|
| প্রসেসিং | অ্যাসিঙ্ক্রোনাস অপারেশন সম্পন্ন হওয়ার পরে কলব্যাক ফাংশন কল হয়। | প্রমিস ভবিষ্যতে ফলাফল প্রদান করে এবং .then() বা .catch() দিয়ে পরিচালিত হয়। |
| কোডের পড়াশোনা | নেস্টেড কলব্যাক (Callback Hell) হয়ে যেতে পারে। | কোডটি পরিস্কার এবং সহজে বুঝতে পারা যায়। |
| এরি চেইনিং | চেইনিং করা কঠিন। | প্রমিসেস চেইনিং করে একাধিক অ্যাসিঙ্ক্রোনাস কাজ সোজা ভাবে সম্পন্ন করা যায়। |
৫. অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ে ব্যবহৃত অন্যান্য টুলস
TypeScript/JavaScript এ আরও কিছু টুল এবং লাইব্রেরি আছে যা কলব্যাক এবং প্রমিসেস ব্যবহারে সহায়ক হতে পারে:
- RxJS: রিঅ্যাকটিভ প্রোগ্রামিংয়ের জন্য ব্যবহৃত লাইব্রেরি।
- SetTimeout/SetInterval: নির্দিষ্ট সময় পর একটি ফাংশন কল করার জন্য।
- Event Listeners: DOM ইভেন্টগুলো অ্যাসিঙ্ক্রোনাসভাবে হ্যান্ডেল করতে।
সারাংশ
TypeScript এ কলব্যাক ফাংশন এবং প্রমিসেস আপনাকে অ্যাসিঙ্ক্রোনাস অপারেশন ম্যানেজ করতে সাহায্য করে। কলব্যাক ফাংশন সাধারণত একটি নির্দিষ্ট কাজ সম্পন্ন হওয়ার পর অন্য একটি ফাংশন কল করতে ব্যবহৃত হয়, যেখানে প্রমিসেস ভবিষ্যতে ফলাফল প্রদান করতে সক্ষম। async/await সিনট্যাক্স প্রমিসেসের ব্যবহারের কাজকে আরও সোজা এবং পরিষ্কার করে তোলে।
Read more