کالبک ها (Callbacks)
«کالبک (Callback)» یعنی تابعی را به تابع دیگر پاس بدهیم تا بعداً اجرا شود. مثل این که به دوستت بگویی: «کارم که تمام شد، بهت زنگ می زنم.»
ترتیب اجرای توابع (Function Sequence)
توابع به ترتیبی اجرا می شوند که صدا زده می شوند؛ نه جایی که تعریف شده اند.
function myDisplayer(text) {
console.log(text);
}
function myFirst() {
myDisplayer("Hello");
}
function mySecond() {
myDisplayer("Goodbye");
}
myFirst();
mySecond();
اگر برعکس صدا بزنی، خروجی هم برعکس می شود.
function myDisplayer(text) {
console.log(text);
}
function myFirst() {
myDisplayer("Hello");
}
function mySecond() {
myDisplayer("Goodbye");
}
mySecond();
myFirst();
کنترل ترتیب با یا بدون کالبک
یا اول حساب کن و بعد نمایش بده، یا نمایش را داخل همان تابع انجام بده.
function myDisplayer(some) {
document.getElementById("demo").innerHTML = some;
}
function myCalculator(num1, num2) {
let sum = num1 + num2;
return sum;
}
let result = myCalculator(5, 5);
myDisplayer(result);
function myDisplayer(some) {
document.getElementById("demo").innerHTML = some;
}
function myCalculator(num1, num2) {
let sum = num1 + num2;
myDisplayer(sum);
}
myCalculator(5, 5);
هشدار: روش دوم جلوی نمایش را نمی توانی بگیری. وابستگی ایجاد می شود.
تعریف کالبکِ واقعی
اینجا تابع حساب، نتیجه را به «کالبک» می دهد تا هر کاری بخواهد انجام دهد.
function myDisplayer(some) {
document.getElementById("demo").innerHTML = some;
}
function myCalculator(num1, num2, myCallback) {
let sum = num1 + num2;
myCallback(sum);
}
myCalculator(5, 5, myDisplayer);
نکته: هنگام پاس دادن تابع، پرانتز نگذار. درست: myDisplayer ؛ نادرست: myDisplayer().
کالبک های پیکانی (Arrow) در عمل
با کالبک پیکانی، منفی ها را حذف کن و مثبت ها را نگه دار.
const myNumbers = [4, 1, -20, -7, 5, 9, -6];
const posNumbers = removeNeg(myNumbers, function (x) {
return x >= 0;
});
document.getElementById("demo").innerHTML = posNumbers;
function removeNeg(numbers, callback) {
const myArray = [];
for (const x of numbers) {
if (callback(x)) {
myArray.push(x);
}
}
return myArray;
}
گام های عملی
- یک «نمایش گر» بساز؛ فقط خروجی بدهد.
- تابع کارگر بنویس؛ فقط محاسبه کند.
- کالبک را ورودی تابع کارگر کن.
نکته: کالبک ها در کارهای زمان بر می درخشند. ادامه مسیر: ناهمگام.
جمع بندی سریع
- کالبک یعنی اجرای بعدیِ دلخواه.
- پرانتز نگذار هنگام پاس دادن.
- وابستگی را کم نگه دار.
- برای کارهای زمان بر عالی است.
برای مسیر اجرای کد به کنترل جریان سر بزن. همچنین تکرارگرها مفیدند.