الدوال (متقدم)

مقدمة

تحدثنا عن أساسيات الدوال في درس الدوال في المستوى اﻹبتدائي، وتعمقنا في الدوال وتفاصيلها المتقدمة في درس الدوال (متوسط) واﻵن سنتعلم بعض اﻷمور التي لم نذكرها عن الدوال في المستويات السابقة

القيم اﻹفتراضية للمدخلات

يمكننا أن نعرف قيمة افتراضية (Default) للمتغير، بحيث إذا قمت باستدعاء الدالة بدون إدخال قيمة المُدخل فإنه يستخدم القيمة اﻹفتراضية.

في المثال التالي نقوم بإنشاء دالة مهمتها إضافة عملة إلى رقم، وتأخذ مُدخلين: اﻷول الرقم والثاني العملة، وتقوم بإرجاع دمج الرقم والعملة، ولكن في هذا المثال قمنا بتعريف قيمة افتراضية لمدخل العملة currency بحيث إذا تم استدعاء الدالة بدون إدخال العملة، تكون العملة القيمة اﻹفتراضية التي عرفناها.

function format(price, currency = "$") {
  return price + currency;
}

console.log( format(50, "€") );
console.log( format(30) );

ناتج التشغيل 50€
30$

في المثال السابق استدعينا الدالة مرتين، المرة اﻷولى قمنا بإدخال العملة اليورو ولكن في المثال الثاني لم نقم بإدخال العملة، فماذا حدث؟ أصبحت قيمة المدخل currency تساوي القيمة الافتراضية التي حددناها له، وهي الدولار $، وبالتالي طبع المفسر 30$ كما لو كنا أدخلنا العملة كدولار.

عند إنشاء الدالة نضع المُدخلات التي لها قيمة افتراضية في آخر المدخلات، كما فعلنا مع المتغير currency وضعناه في اﻵخر، وذلك حتى نتمكن من تمرير قيمة المتغيرات اﻷخرى التي ليس لها قيمة افتراضية.

دالة الاستجابة (Callback Function)

دالة اﻹستجابة هي دالة تُمرر لدالة أخرى

  • يمكنك تمرير دالة كمُدخل لدالة أخرى
  • الهدف من ذلك أن الدالة اﻷخرى ستتمكن من استدعاء هذه الدالة
  • يمكن مثلاً للدالة استدعاء دالة الاستجابة بعد أن تنتهي من عملها

دوال الاستجابة ليست مدعومة في كل لغات البرمجة، ولكن من اللغات التي تدعمها وتستخدمها بكثرة: (Javascript, PHP)

أهمية استخدام دالة الاستجابة

لن تُدرك أهميتها إلا عند كتابة أكواد برامج حقيقية، فمثلاً تخيل أن لدينا دالة تقوم بحذف ملف، وهذه العملية تستغرق وقت، وهذا الوقت ربما يتغير من جهاز لجهاز ومن مرة لمرة ومن ملف لملف، ونريد أن نقوم بطباعة "تم حذف الملف بنجاح" فقط بعد أن يتم حذف الملف؟ كيف نقوم بها، بالطبع لن نتمكن بدون دوال الاستجابة، يمكننا استدعاء دالة تقوم بحذف الملف، وتمرير دالة استجابة لدالة حذف الملف وتقوم دالة حذف الملف باستدعاء دالة الاستجابة عند الانتهاء من حذف الملف!

كتابة دوال اﻹستجابة

عند تعريف الدالة يمكنك إضافة مُدخل جديد بأي اسم كأي مدخل، وداخل الدالة يمكنك استدعاء هذا المدخل كدالة.

في المثال التالي نقوم بإنشاء دالة calc تحسب مجموع عددين، ويدخل لها مُدخل ثالث وهو دالة استجابة اخترنا لها اسم callback وتقوم الدالة calc باستدعاء دالة الاستجابة بعد الانتهاء من العملية الحسابية

function calc(x, y, callback){
  console.log(x+y);
  callback();
}

calc( 4, 6, function (){console.log('تمت العملية بنجاح')} );
ناتج التشغيل 10
تمت العملية بنجاح

لاحظ أننا في السطر اﻷخير قمنا باستدعاء الدالة وتمرير دالة أخرى كمُدخل ثالث، وتكون دالة الاستجابة بلا اسم عند تمريرها...

ويمكن كتابة السطر اﻷخير بطريقة أفضل وأكثر قابلية للقراءة:

calc( 4, 6, function (){
  console.log('تمت العملية بنجاح')
});

الاختلاف هنا أن ما بين أقواس دالة الاستجابة {} أصبح في أسطر جديدة...

ستستخدم دوال الاستجابة (Callback Functions) بكثرة في الدروس القادمة، خصوصاً في الدروس العملية.

المساهمين

وجدت خطأ أو تريد المساهمة في محتوى الدرس؟ عدل الصفحة على Github