Header Ads

Header ADS

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:

তুমি ডেটা দাও, সেটা সাথে সাথে রিটার্ন করে।

কিন্তু, অনেক সময় আমাদের এমন কাজ করতে হয় যেগুলো সাথে সাথে শেষ হয় না—যেমনঃ

  1. ফাইল পড়া (fs.readFile)

  2. API কল করা

  3. Database থেকে data আনা

  4. 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 মূলত ব্যবহার করা হয়:

  1. Asynchronous কাজ শেষ হলে কী করা হবে সেটা নির্ধারণ করতে

  2. Code কে আরও flexible এবং dynamic করতে

  3. অন্য ফাংশনের কাজ শেষে অন্য ফাংশন রান করাতে


🔚 সারাংশ:

  1. Scenario-2 ভালো simple sync কাজের জন্য

  2. 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 অপরিহার্য।


Powered by Blogger.