وليد الشهري
وليد الشهري

@Waleed_S_7

8 تغريدة 62 قراءة Jul 04, 2022
ما معنى "التحميل الزائد للدالة" (function overloading) في البرمجة؟!
ببساطة، يحدث هذا عندما نطلق على عدد من الدوالّ (function) التسمية نفسها.. فقط!
ولماذا سأحتاج إلى استخدام المسمّى نفسه مع عدّة دوالّ؟! وكيف يستطيع البرنامج التفريق بينها دون خطأ أو لَبس؟!
(سلسلة)
أحيانًا يكون من المستحسن إطلاق التسمية نفسها على عدد من الدوال، وذلك نظرًا لتشابه المهام المنوطة بكلٍّ منها، فيمكن أن أسمّي كلّ دالّة متخصّصة في إيجاد ناتج الجمع في برنامجي بالاسم ذاته (وليكن "sum" مثلًا)، وهذا من شأنه..
تسهيل القدرة على قراءة الكود (readability) لاحقًا، سواء من قبلي أو من قبل أشخاص آخرين، فيفهم القارئ أن مبدأ عمل الدوالّ ذات التسمية المتطابقة متطابق، ومع هذا ينبغي تجنّب الإفراط غير المبرّر في استخدام "التحميل الزائد" (overloading).
علمنا الآن لماذا يمكن أن نلجأ إلى "التحميل الزائد" (overloading)، ولكن.. كيف يستطيع البرنامج التفريق بين الدوال ذات التسمية المتشابهة؟! ألا يمكن أن يتسبب هذا في نوع من التداخل والخلل؟! والإجابة هي: لا.
والسبب أن الدوال وإن تشابهت من حيث التسمية، فلا بد أن تختلف في أحد الأمرين التاليين أو في كليهما:
الأول: نوع مدخلات الدالة، مثل:
sum (int a, int b) {...}
sum (float a, float b) {...}
حيث المدخلات في الدالة الأولى من نوع "int" وفي الثانية من نوع "float".
الثاني: عدد مدخلات الدالة، مثل:
sum (int a, int b) {...}
sum (int a, int b, int c) {...}
حيث تستقبل الدالة الأولى مُدخلين (a,b)، وتستقبل الثانية ثلاثة مدخلات (a,b,c)، رغم أنّ جميع المدخلات للدالّتين من النوع نفسه (int)، لكنّ عدد المدخلات في كلّ منهما مختلف.
وهكذا يتعرّف المترجم على مكامن الاختلاف بين الدوال وإن تشابهت أسماؤها، ولا يخلط بينها.
بقي أن أضيف أنّ "التحميل الزائد" (overloading) يمكن أن يُطبَّق على العوامل (operators) أيضًا في بعض لغات البرمجة، مثل:
C++, C#...
ويدعى في هذه الحالة: "operator overloading".
ودون الخوض في التفاصيل، فإنّ "التحميل الزائد" للعوامل يدور حول المفهوم نفسه المذكور آنفًا مع الدوال، إلّا أنّنا هذه المرّة سنتعاطى مع عامل (ليكن عامل الجمع "+" مثلًا)، بحيث سننشئ له معنًى آخر بخلاف المعنى الأصلي الذي وُضِع له، ولعلّي أفرد له سلسلة خاصّة فيما بعد.
انتهى.

جاري تحميل الاقتراحات...