Callback Function
✅ প্রথমে দেখি দুইটা scenario কী করছে:
🔹 Scenario-1:
function magic (data , callback){
callback(data + "hello") ;
}
magic("ali", function(value){
console.log(value)
});
👉 এখানে তুমি magic() ফাংশনে একটা callback function পাঠাচ্ছো, যেটা তখনই execute হবে যখন magic() ফাংশন তাকে কল করবে।
🔹 Scenario-2:
function magic (data){
return (data + "hello") ;
}
let value = magic("ali")
console.log(value);
👉 এখানে ফাংশনটা শুধু একটা value রিটার্ন করে, তুমি সেটা সরাসরি প্রিন্ট করছো। দেখতে খুবই সোজা।
✅ এখন আসল প্রশ্নের উত্তর:
“যখন scenario-2 এত সহজ, তখন আমরা callback কেন ব্যবহার করি?”
🔥 কারণ হচ্ছে: Asynchronous Execution (অসামঞ্জস্যপূর্ণ বা দেরিতে হওয়া কাজ)
🧠 বুঝে নিও — Synchronous vs Asynchronous:
✅ Scenario-2 হচ্ছে Synchronous:
তুমি ডেটা দাও, সেটা সাথে সাথে রিটার্ন করে।
কিন্তু, অনেক সময় আমাদের এমন কাজ করতে হয় যেগুলো সাথে সাথে শেষ হয় না—যেমনঃ
ফাইল পড়া (
fs.readFile)-
API কল করা
-
Database থেকে data আনা
-
Timer delay (setTimeout)
এইসব কাজ Asynchronous, মানে শেষ হতে সময় লাগে।
✅ উদাহরণ দিয়ে বুঝি:
// Synchronous
function add(a, b){
return a + b;
}
let result = add(2, 3);
console.log(result); // 5
এখানে কোনো delay নেই। কিন্তু এখন ধরো নিচের মতো:
// Asynchronous with callback
const fs = require("fs");
fs.readFile("data.txt", "utf8", function(err, data){
if(err) return console.log(err);
console.log(data);
});
console.log("Reading file...");
➡ এখানে fs.readFile হচ্ছে asynchronous, কাজ শেষ হলে callback execute হবে।
➡ console.log("Reading file...") আগেই execute হবে।
✅ Callback function মূলত ব্যবহার করা হয়:
-
Asynchronous কাজ শেষ হলে কী করা হবে সেটা নির্ধারণ করতে
-
Code কে আরও flexible এবং dynamic করতে
-
অন্য ফাংশনের কাজ শেষে অন্য ফাংশন রান করাতে
🔚 সারাংশ:
Scenario-2 ভালো simple sync কাজের জন্য
-
Scenario-1 (callback) দরকার যখন asynchronous কাজ করো বা flexibility চাও
দুইটিই কোন না কোনভাবে result বা output দেয়, কিন্তু দেখার বিষয় হলো “কখন” এবং “কীভাবে” result দেয়।
✅ হ্যাঁ, উভয়েই Result দেয়:
🔹 Scenario-2:
function magic(data) {
return data + "hello";
}
let result = magic("ali");
console.log(result); // "alihello"
➡ এখানে return দিয়ে সরাসরি result পাওয়া যায়।
➡ এইটা synchronous—মানে result সঙ্গে সঙ্গে পাওয়া যায়।
🔹 Scenario-1:
function magic(data, callback) {
callback(data + "hello");
}
magic("ali", function(result) {
console.log(result); // "alihello"
});
➡ এখানে result ফাংশনের মাধ্যমে callback function এ পাঠানো হয়।
➡ এইটা ব্যবহার হয় asynchronous পরিস্থিতিতে, যেখানে return দিয়ে result দেওয়া সম্ভব হয় না।
✅ তাহলে callback vs return এর মূল পার্থক্য:
| বিষয় | return | callback |
|---|---|---|
| সময় | সঙ্গে সঙ্গে (synchronous) | দেরিতে (asynchronous) |
| কিভাবে result আসে | সরাসরি রিটার্ন হয় | function call এর মাধ্যমে |
| ব্যবহার হয় | সাধারণ হিসাব, সরল ফাংশন | API calls, file read, async operations |
✅ উদাহরণ: যদি আমরা delay দেই
function magic(data, callback){
setTimeout(() => {
callback(data + "hello");
}, 2000);
}
magic("ali", function(result){
console.log(result); // 2 সেকেন্ড পর: "alihello"
});
➡ এখানে যদি return ব্যবহার করতে চাই, তাহলে result পাওয়া যেত না কারণ ফাংশন আগে শেষ হয়ে যেত।
🔚 সংক্ষেপে বললে:
তুমি ঠিক বলেছো—উভয়ই result দেয়, কিন্তু callback ব্যবহার হয় যখন result সঙ্গে সঙ্গে পাওয়া যাবে না, বরং পরে পাওয়া যাবে। আর এই টাইম-ডিলেইড কাজের জন্য callback অপরিহার্য।