Callback چییە؟

لە جاڤاسکریپتدا، فەنکشنەکان بە 'First-class objects' دادەنرێن. ئەمەش واتە دەتوانیت فەنکشنێک وەک هەر گۆڕاوێکی تر بەکاربهێنیت. کاتێک فەنکشنێک دەنێریت وەک پارامەتر بۆ فەنکشنێکی تر، بەو فەنکشنە نێردراوە دەوترێت Callback.

سەرەکیترین سوودی Callback ئەوەیە کە ڕێگەت پێ دەدات کۆدێک جێبەجێ بکەیت تەنها دوای ئەوەی کارێکی تر تەواو بوو. ئەمە بنەمای کارکردنی ئاسینکرۆنە لە جاڤاسکریپتدا.

تێبینی: بیرت بێت کە Callback تەنها ناوی فەنکشنەکەیە (بەبێ کەوانە)، چونکە ئێمە تەنها ئاماژە بە فەنکشنەکە دەکەین بۆ ئەوەی لە کاتی پێویستدا بانگ بکرێت.

نموونەی یەکەم: Callback-ی سادە

لەم نموونەیەدا، فەنکشنێکی سادە دەبینین کە ناوی کەسێک وەردەگرێت و پاشان فەنکشنێکی تر بانگ دەکات بۆ ئەنجامدانی کارێکی زیادە.

function showMessage(name, callback) {
  console.log("سڵاو " + name);
  callback();
}

function sayGoodbye() {
  console.log("بەخێر بێیت بۆ جیهانی Callback!");
}

showMessage("ئەحمەد", sayGoodbye);

ڕوونکردنەوە: کاتێک showMessage بانگ دەکەین، فەنکشنەکە سەرەتا ناوی 'ئەحمەد' چاپ دەکات، پاشان ئەو فەنکشنەی کە پێمان داوە (sayGoodbye) جێبەجێ دەکات.

بۆچی پێویستمان بە Callback هەیە؟

زۆربەی کات ئێمە نازانین کارێک چەند کاتی پێ دەچێت، بۆ نموونە کاتێک داتا لە ڕاژەکارێک (Server) وەردەگرین. ئەگەر بە شێوەی ئاسایی کۆدەکە بنووسین، ڕەنگە بەرنامەکە پێش ئەوەی داتاکە بگات، بەردەوام بێت لە کارکردن و هەڵە ڕووبدات.

نموونەی دووەم: بەکارهێنانی setTimeout

ئەم فەنکشنە نموونەیەکی باوی ئاسینکرۆنە کە ڕێگەت پێ دەدات کارێک دوای ماوەیەک جێبەجێ بکەیت.

console.log("دەستپێکردن...");

setTimeout(function() {
  console.log("ئەم پەیامە دوای ٢ چرکە دەردەکەوێت");
}, 2000);

console.log("کۆتایی هاتن.");

ڕوونکردنەوە: سەرەڕای ئەوەی setTimeout لە ناوەڕاستدایە، بەڵام 'کۆتایی هاتن' پێش ئەو پەیامەی ناو Callback-ەکە چاپ دەبێت. ئەمە نیشانەی ئاسینکرۆن بوونی جاڤاسکریپتە.

کێشەی Callback Hell

کاتێک چەندین Callback لەناو یەکتردا بەکاردەهێنیت (Nested Callbacks)، کۆدەکەت شێوەی پیتی 'V' وەردەگرێت و خوێندنەوەی زۆر سەخت دەبێت. بەم دۆخە دەوترێت Callback Hell.

ئاگاداری: هەمیشە هەوڵبدە لە جیاتی بەکارهێنانی Callback-ی زۆر لەناو یەکتردا، بیر لە بەکارهێنانی Promises یان async/await بکەیتەوە کە لە وانەکانی داهاتوو فێری دەبیت.

نموونەی سێیەم: مامەڵەکردن لەگەڵ هەڵە (Error Handling)

زۆر گرنگە لە Callback-ەکاندا ڕەچاوی هەڵەکان بکەیت. باوترین شێواز ئەوەیە کە پارامەتری یەکەم بۆ هەڵە تەرخان بکرێت.

function fetchData(callback) {
  let success = false;
  if (success) {
    callback(null, "داتاکە بە سەرکەوتوویی هێنرا");
  } else {
    callback("هەڵەیەک ڕوویدا!", null);
  }
}

fetchData(function(err, data) {
  if (err) console.log("هەڵە:", err);
  else console.log("سەرکەوتن:", data);
});

ڕاهێنان

فەنکشنێک بنووسە بە ناوی calculate کە دوو ژمارە و فەنکشنێکی Callback وەردەگرێت. فەنکشنەکە با ئەنجامی کۆکردنەوەی دوو ژمارەکە بدات بە Callback-ەکە و لەوێوە ئەنجامەکە چاپ بکە.