‎‎كال بك هادر جاوااسكريپتJavaScript Callbacks -‎

Previous >    <Next  

‎جاوااسكريپت براي اجراي كدهاي خود، بصورت نرمال دستورات را خط به خط تفسير واجرا مي نمايد ‎يعني ابتدا تمام برنامه را كمپايل وبعدا اجرا نميكند .اگر در ترتيب تفسير واجرا توالي ‎،دستورات نياز به توقف اجرا نداشته باشد، كار ساده تر است ، اما در دنياي واقعي هم اينطورنيست ‎كه فعاليت ها زنجيروار بدون نياز به حلقه هاي بعدي انجام شوند .عمليات موازي و نياز ‎عمليات به حلقه بعدي وجود دارد ومديريت آنهم، از روال معمول پيچيده تر خواهد بود.

‎بسياري از دستورات وبلوكهاي كدي را مطابق نحوي معمولش جاوااسكريپت تفسير واجراميكند .اما بعضي ‎از موارد را برنامه نويس براي بهره دهي بهتر و اجراي بدون مشكل بايد مديريت سخت تري اعمال ‎نمايد .دراين بخش وسه بخش بعدي موارد پيچيده تر بحث ميشود.

‎اصطلاحcallbak به توابعي گفته ميشود كه آنها بعنوان آرگومان در يك تابع ديگر فراخوان ميشوند . ‎اين تكنيك يا روش اجازه ميدهد كه تابعي بعنوان آرگومان در تابع ديگر استفاده شود.

‎تابعي كه براي آرگومان خود ، تابع ديگر را فراخوان ميكند بايد منتظر بماند، تاپاسخ برگشت را ‎از تابع آرگوماني دريافت كند و كار خود را ادامه دهد.

‎‎توالي توابعFunction Sequence -‎

‎‎توابع جاوااسكريپت به ترتيپ فراخواني اجرا ميشوند، نه به ترتيب تعريف شده.

‎‎مثال ـ اين مثال در نهايت‎‎"Goodbye‎"‎ را نمايش ميدهد .

function myFirst() {
  myDisplayer("Hello");
}

function mySecond() {
  myDisplayer("Goodbye");
}

myFirst();
mySecond();

--(go to editor for change code and run)

‎‎مثال ـ اين مثال در انتها پيغام‎‎"Hello‎"‎ نمايش ميدهد

function myFirst() {
  myDisplayer("Hello");
}

function mySecond() {
  myDisplayer("Goodbye");
}

mySecond();
myFirst();

--(go to editor for change code and run)

‎‎در دو مثال فوق مشخص شد كه ترتيب تعاريف توابغ هييچ نقشي در ترتيب اجرا ندارد.

‎‎كنترل تواليSequence Control -‎

‎گاهي اوقات مناسب است كه كنترل بهتري روي زمان اجراي يك تابع داشته باشيد .فرض كنيد كه ‎ميخواهيم محاسبه اي انجام ونتيجه آن نمايش داده شود.

‎ميتوان ابتدا تابعي بنام‎myCalculate‎ اجرا نموده ونتيجه آنرا ذخيره كرد .سپس ‎تابع ديگري مثل‎myDisplay‎ براي نمايش نتيجه ذخيره شده استفاده نمود .

‎‎مثال ـ برنامه محاسبه ونمايش مطابق روند فوق

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);

--(go to editor for change code and run)

‎يا همان مورد را با فراخواني تابع‎myDisplay‎ در تابع‎myCalculate‎ ‎مطابق مثال زير:

‎‎مثال ـ روش دوم نمايش محاسبه

function myDisplayer(some) {
  document.getElementById("demo").innerHTML = some;
}

function myCalculator(num1, num2) {
  let sum = num1 + num2;
  myDisplayer(sum);
}

myCalculator(5, 5);

--(go to editor for change code and run)

‎مسئله براي مثال اول اين است كه براي نمايش نتيجه بايد دوتابع فراخواني شوند .اما در مثال دوم ‎نمي توان عملكرد تابع‎myCalculaor‎ را براي محاسبه در نمايش جلوگيري كرد .

‎‎اكنون لازم است كه در مورد توابع برگشتي‎(callbak)‎ بحث شود .

‎‎كال بك هاي جاوااسكريپتJavaScript Callbaks -‎

‎‎يك كال بك تابعي است كه مشابه يك آرگومان در يك تابع ديگر ارسال ميشود.

‎با استفاده ازيكcallback ميتوان تابعmyCalculator را با يك تابعmyCallbak فراخوان كرد ‎و تابعmyCalculator اجازه دارد پس از پايان محاسبه، پاسخ myCallbak را اجرا كند .

function myDisplayer(some) {
  document.getElementById("demo").innerHTML = some;
}

function myCalculator(num1, num2, myCallback) {
  let sum = num1 + num2;
  myCallback(sum);
}

myCalculator(5, 5, myDisplayer);

--(go to editor for change code and run)

‎در مثال بالا‎myDisplay‎ تابع كال بك ميباشد . آن تابع بعنوان آرگومان براي ‎تابع‎myCalculator‎ ارسال شده است .

‎توجه ـ هنگاميكه يك تابع بعنوان يك آرگومان ارسال ميشود، پرانتز بازوبسته ندارد .نحوي درست ‎مطابق زيراست.

Right: myCalculator(5,5, myDisplay)
worng: myCalculator(5,5, myDisplay( ))

‎‎مثال ـ حذف اعداد منفي از آرايه بااستفاذه ازتابع كال بك

// Create an Array
const myNumbers = [4, 1, -20, -7, 5, 9, -6];

// Call removeNeg with a callback
const posNumbers = removeNeg(myNumbers, (x) => x >= 0);

// Display Result
document.getElementById("demo").innerHTML = posNumbers;

// Keep only positive numbers
function removeNeg(numbers, callback) {
  const myArray = [];
  for (const x of numbers) {
    if  (callback(x)) {
      myArray.push(x);
    }
  }
  return myArray;
}

--(go to editor for change code and run)

‎‎چه مواقعي از كال بك استفاده كنيم

‎مثالهاي بالا براي كال بك خيلي مورد توجه نيستند، اما براي ارائه ساده تر مطالب استفاده شده ‎است.

‎در حالتي تك تابع بايد منتظر پايان كار تابع ديگر بماند مثال انتظار براي بارگيري فايل، تابع ‎كال بك كابرد دارند.

‎‎در مورد توابع ناهمزمان در فصل بعدي پوشش داده ميشود.


Previous >    <Next