كيفية تمرير دالة كوسيط
في برمجة C
في عالم برمجة C، تلعب الدوال دورًا حاسمًا في إدارة وتنظيم الشيفرة. لكن هل كنت تعلم أنه يمكنك أيضًا تمرير دالة كوسيط إلى دالة أخرى؟ هذه القدرة أساسية لإنشاء شيفرة أكثر مرونة وقابلية لإعادة الاستخدام. في هذه التدوينة، سنستكشف كيفية إنجاز ذلك باستخدام أمثلة واضحة وخطوات منظمة.
المشكلة: تمرير دالة كوسيط
عند العمل مع الدوال، قد تواجه حالات ترغب فيها في إنشاء دالة أكثر عمومية يمكنها أداء عملية معينة محددة بواسطة دالة أخرى. على سبيل المثال، اعتبر سيناريو حيث لديك دالة تعالج سلسلة من نقاط البيانات، وتريد تحديد وظيفة المعالجة التي يجب استخدامها عن طريق تمريرها كوسيط.
دعونا نستعرض كيفية تمرير دالة كوسيط في C، مع تقسيمها إلى صيغة يسهل فهمها.
الخطوة 1: إعلان الدالة
الخطوة الأولى في هذه العملية هي إعلان دالة تقبل دالة أخرى كوسيط. إليك الصيغة التي تحتاج إلى اتباعها:
void func(void (*f)(int));
إليك ما يعنيه هذا الإعلان:
void func
: هذا هو إعلان الدالة المسماةfunc
.void (*f)(int)
: هذا يحدد أنf
هو مؤشر لدالة لا تعيد قيمة (void
) وتأخذ وسيطًا صحيحًا واحدًا (int
).
مثال على دالة
لنقم بإنشاء دالة مثال يمكن تمريرها كوسيط. اعتبر الدالة التالية المسماة print
:
void print(int x) {
printf("%d\n", x);
}
هذه الدالة print
تقوم ببساطة بطباعة عدد صحيح على وحدة التحكم.
الخطوة 2: استدعاء الدالة
عندما تريد استدعاء الدالة التي تقبل دالة أخرى كوسيط، تحتاج إلى تمرير عنوان الدالة التي تريد استخدامها. يمكنك القيام بذلك ببساطة عن طريق الإشارة إلى اسم الدالة دون أقواس:
func(print);
سوف تستدعي هذه السطر func
وتنتقل بالدالة print
إليها.
الخطوة 3: استخدام الدالة الممررة في جسم الدالة
الآن وبعد أن حصلنا على دالتنا التي تقبل دالة أخرى كوسيط، دعونا نرى كيفية استخدامها داخل جسم الدالة. لنفترض أننا نريد تطبيق الدالة الممررة على الأرقام من 0 إلى 4.
إليك كيف يجب أن تستدعي print
تقليديًا داخل حلقة:
for (int ctr = 0; ctr < 5; ctr++) {
print(ctr);
}
وبما أننا نريد الآن استخدام مؤشر الدالة f
، سنقوم بتعديل هذا الجزء لاستخدام *f
بدلاً من print
:
void func(void (*f)(int)) {
for (int ctr = 0; ctr < 5; ctr++) {
(*f)(ctr);
}
}
في هذا المثال، (*f)(ctr)
ينفذ الدالة المشار إليها بواسطة f
مع ctr
كوسيط لها، مما يستدعي فعليًا print
مع القيمة الحالية لـ ctr
.
الخاتمة
باتباع هذه الخطوات، يمكنك بفعالية تمرير دالة كوسيط
في C. هذه التقنية تسمح بمزيد من المرونة في برمجتك وتمكنك من إنشاء مكونات شيفرة ديناميكية وقابلة لإعادة الاستخدام.
لأولئك الذين يرغبون في التعمق أكثر في برمجة C وفهم المزيد عن مؤشرات الدوال، انظر إلى هذا المصدر للحصول على معلومات إضافية.
ترميز سعيد!