في لغة C، يمكننا تقسيم برنامج كبير إلى وحدات البناء الأساسية المعروفة باسم الوظيفة. تحتوي الدالة على مجموعة عبارات البرمجة المحاطة بـ {}. يمكن استدعاء الوظيفة عدة مرات لتوفير إمكانية إعادة الاستخدام والنمطية لبرنامج C. بمعنى آخر، يمكننا القول أن مجموعة الوظائف تخلق برنامجًا. تُعرف الوظيفة أيضًا باسم إجراء أو روتين فرعي في لغات البرمجة الأخرى.
الاستفادة من الوظائف في C
هناك المزايا التالية لوظائف C.
- باستخدام الوظائف، يمكننا تجنب إعادة كتابة نفس المنطق/الرمز مرارًا وتكرارًا في البرنامج.
- يمكننا استدعاء وظائف C لأي عدد من المرات في البرنامج ومن أي مكان في البرنامج.
- يمكننا تتبع برنامج C كبير بسهولة عندما يتم تقسيمه إلى وظائف متعددة.
- إعادة الاستخدام هي الإنجاز الرئيسي لوظائف C.
- ومع ذلك، يعد استدعاء الوظائف دائمًا عبءًا إضافيًا في برنامج C.
الجوانب الوظيفية
هناك ثلاثة جوانب لوظيفة C.
SN | جوانب وظيفة C | بناء الجملة |
---|---|---|
1 | إعلان الوظيفة | return_type function_name (قائمة الوسائط)؛ |
2 | استدعاء الوظيفة | اسم_الوظيفة (قائمة_الوسيطات) |
3 | تعريف الوظيفة | return_type function_name (قائمة الوسيطات) {function body;} |
بناء جملة إنشاء وظيفة في لغة C موضح أدناه:
return_type function_name(data_type parameter...){ //code to be executed }
أنواع الوظائف
هناك نوعان من الوظائف في برمجة C:
قيمة الإرجاع
قد تقوم الدالة C بإرجاع أو عدم إرجاع قيمة من الدالة. إذا لم تكن بحاجة إلى إرجاع أي قيمة من الدالة، فاستخدم void لنوع الإرجاع.
دعونا نرى مثالاً بسيطًا لدالة C التي لا تُرجع أي قيمة من الدالة.
مثال بدون قيمة الإرجاع:
void hello(){ printf('hello c'); }
إذا كنت تريد إرجاع أي قيمة من الوظيفة، فستحتاج إلى استخدام أي نوع بيانات مثل int، وlong، وchar، وما إلى ذلك. ويعتمد نوع الإرجاع على القيمة التي سيتم إرجاعها من الوظيفة.
ما هو مدمج
دعونا نرى مثالاً بسيطًا لدالة C التي تُرجع قيمة int من الدالة.
مثال مع قيمة الإرجاع:
int get(){ return 10; }
في المثال أعلاه، يتعين علينا إرجاع 10 كقيمة، وبالتالي فإن نوع الإرجاع هو int. إذا كنت تريد إرجاع قيمة الفاصلة العائمة (على سبيل المثال، 10.2، 3.1، 54.5، إلخ)، فستحتاج إلى استخدام float كنوع الإرجاع للطريقة.
float get(){ return 10.2; }
أنت الآن بحاجة إلى استدعاء الدالة للحصول على قيمة الدالة.
جوانب مختلفة من استدعاء الوظيفة
قد تقبل أو لا تقبل الوظيفة أي وسيطة. قد يُرجع أو لا يُرجع أي قيمة. بناءً على هذه الحقائق، هناك أربعة جوانب مختلفة لاستدعاءات الوظائف.
- دالة بدون وسيطات وبدون قيمة إرجاع
- تعمل بدون وسيطات وبقيمة الإرجاع
- وظيفة مع الحجج وبدون قيمة الإرجاع
- تعمل مع الحجج ومع قيمة الإرجاع
مثال للدالة بدون وسيطة وقيمة الإرجاع
مثال 1
#include void printName(); void main () { printf('Hello '); printName(); } void printName() { printf('Javatpoint'); }
انتاج |
أرقام الأبجدية
Hello Javatpoint
مثال 2
#include void sum(); void main() { printf(' Going to calculate the sum of two numbers:'); sum(); } void sum() { int a,b; printf(' Enter two numbers'); scanf('%d %d',&a,&b); printf('The sum is %d',a+b); }
انتاج |
Going to calculate the sum of two numbers: Enter two numbers 10 24 The sum is 34
مثال للدالة بدون وسيطة وبقيمة الإرجاع
مثال 1
#include int sum(); void main() { int result; printf(' Going to calculate the sum of two numbers:'); result = sum(); printf('%d',result); } int sum() { int a,b; printf(' Enter two numbers'); scanf('%d %d',&a,&b); return a+b; }
انتاج |
Going to calculate the sum of two numbers: Enter two numbers 10 24 The sum is 34
مثال 2: برنامج لحساب مساحة المربع
نظام الملفات في لينكس
#include int sum(); void main() { printf('Going to calculate the area of the square '); float area = square(); printf('The area of the square: %f ',area); } int square() { float side; printf('Enter the length of the side in meters: '); scanf('%f',&side); return side * side; }
انتاج |
Going to calculate the area of the square Enter the length of the side in meters: 10 The area of the square: 100.000000
مثال للدالة ذات الوسيطة وبدون قيمة الإرجاع
مثال 1
#include void sum(int, int); void main() { int a,b,result; printf(' Going to calculate the sum of two numbers:'); printf(' Enter two numbers:'); scanf('%d %d',&a,&b); sum(a,b); } void sum(int a, int b) { printf(' The sum is %d',a+b); }
انتاج |
Going to calculate the sum of two numbers: Enter two numbers 10 24 The sum is 34
مثال 2: برنامج لحساب متوسط خمسة أرقام.
#include void average(int, int, int, int, int); void main() { int a,b,c,d,e; printf(' Going to calculate the average of five numbers:'); printf(' Enter five numbers:'); scanf('%d %d %d %d %d',&a,&b,&c,&d,&e); average(a,b,c,d,e); } void average(int a, int b, int c, int d, int e) { float avg; avg = (a+b+c+d+e)/5; printf('The average of given five numbers : %f',avg); }
انتاج |
Going to calculate the average of five numbers: Enter five numbers:10 20 30 40 50 The average of given five numbers : 30.000000
مثال للدالة ذات الوسيطة وقيمة الإرجاع
مثال 1
#include int sum(int, int); void main() { int a,b,result; printf(' Going to calculate the sum of two numbers:'); printf(' Enter two numbers:'); scanf('%d %d',&a,&b); result = sum(a,b); printf(' The sum is : %d',result); } int sum(int a, int b) { return a+b; }
انتاج |
Going to calculate the sum of two numbers: Enter two numbers:10 20 The sum is : 30
مثال 2: برنامج للتحقق مما إذا كان الرقم زوجيًا أم فرديًا
#include int even_odd(int); void main() { int n,flag=0; printf(' Going to check whether a number is even or odd'); printf(' Enter the number: '); scanf('%d',&n); flag = even_odd(n); if(flag == 0) { printf(' The number is odd'); } else { printf(' The number is even'); } } int even_odd(int n) { if(n%2 == 0) { return 1; } else { return 0; } }
انتاج |
Going to check whether a number is even or odd Enter the number: 100 The number is even
وظائف مكتبة C
وظائف المكتبة هي الوظيفة المضمنة في لغة C والتي يتم تجميعها ووضعها في مكان مشترك يسمى المكتبة. تستخدم هذه الوظائف لتنفيذ بعض العمليات المحددة. على سبيل المثال، printf هي وظيفة مكتبة تستخدم للطباعة على وحدة التحكم. يتم إنشاء وظائف المكتبة من قبل مصممي المترجمين. يتم تعريف جميع وظائف مكتبة C القياسية داخل ملفات الرأس المختلفة المحفوظة بالملحق .ح . نحن بحاجة إلى تضمين ملفات الرأس هذه في برنامجنا للاستفادة من وظائف المكتبة المحددة في ملفات الرأس هذه. على سبيل المثال، لاستخدام وظائف المكتبة مثل printf/scanf نحتاج إلى تضمين stdio.h في برنامجنا وهو ملف رأس يحتوي على جميع وظائف المكتبة المتعلقة بالإدخال/الإخراج القياسي.
يتم عرض قائمة ملفات الرأس المستخدمة في الغالب في الجدول التالي.
SN | الملف الاساسي | وصف |
---|---|---|
1 | stdio.h | هذا هو ملف رأس الإدخال/الإخراج القياسي. يحتوي على جميع وظائف المكتبة المتعلقة بالإدخال/الإخراج القياسي. |
2 | conium.h | هذا هو ملف رأس الإدخال/الإخراج لوحدة التحكم. |
3 | سلسلة. ح | أنه يحتوي على جميع وظائف المكتبة ذات الصلة بالسلسلة مثل get()، puts()، وما إلى ذلك. |
4 | stdlib.h | يحتوي ملف الرأس هذا على جميع وظائف المكتبة العامة مثل malloc() وcalloc() وexit() وما إلى ذلك. |
5 | الرياضيات. ح | يحتوي ملف الرأس هذا على جميع الوظائف المتعلقة بالعمليات الحسابية مثل sqrt() وpow() وما إلى ذلك. |
6 | الوقت. ح | يحتوي ملف الرأس هذا على جميع الوظائف المتعلقة بالوقت. |
7 | ctype.h | يحتوي ملف الرأس هذا على كافة وظائف التعامل مع الأحرف. |
8 | stdarg.h | يتم تعريف وظائف الوسيطة المتغيرة في ملف الرأس هذا. |
9 | إشارة. ح | يتم تعريف جميع وظائف معالجة الإشارة في ملف الرأس هذا. |
10 | setjmp.h | يحتوي هذا الملف على كافة وظائف الانتقال. |
أحد عشر | لغة. ح | يحتوي هذا الملف على وظائف محلية. |
12 | errno.h | يحتوي هذا الملف على وظائف معالجة الأخطاء. |
13 | تأكيد. ح | يحتوي هذا الملف على وظائف التشخيص. |
يتم توفير تفاصيل إضافية بخصوص وظائف C أدناه:
هناك العديد من المعلومات الإضافية المتعلقة بوظائف C. بعض منها على النحو التالي:
البرمجة المعيارية: القدرة على يقسم أ برنامج ضخم إن تحويلها إلى وحدات أصغر وأكثر قابلية للإدارة هي إحدى الفوائد الرئيسية لاستخدام الوظائف في لغة C. وقد تحتوي كل وظيفة على وظيفة معينة أو مكون من الوظائف، مما يبسط ويوضح البنية العامة للبرنامج. تعمل هذه الإستراتيجية المعيارية على تحسين إعادة استخدام التعليمات البرمجية وتجعل الصيانة وتصحيح الأخطاء أسهل.
ما هو التجمع
إعادة استخدام الكود: باستخدام الوظائف، يمكنك إنشاء خوارزمية معينة أو جزء من المنطق مرة واحدة فقط واستخدامها بشكل متكرر خلال برنامجك. يمكنك فقط استدعاء الوظيفة في أي وقت تحتاج فيه إلى تشغيل التعليمات البرمجية، مما يوفر عليك الاضطرار إلى تكرارها في مكان آخر. ليس فقط يسرع التنمية ولكنه يضمن أيضًا الاتساق ويقلل من احتمالية ارتكاب الأخطاء.
التغليف والتجريد: من خلال حجب تفاصيل تنفيذ الوظيفة، توفر الوظائف مستوى من التجريد. يمكن تعريف واجهة النموذج الأولي للوظيفة في ملف الملف الاساسي ، بينما يمكن توفير التنفيذ الفعلي في ملف مصدر مختلف. يمكن لأجزاء أخرى من البرنامج الاستفادة من الوظيفة دون الحاجة إلى فهم كيفية تنفيذها داخليًا بسبب فصل الواجهة والتنفيذ.
صيانة سهلة للبرنامج: يمكن فهم البرنامج وصيانته بسهولة أكبر إذا تم تقسيمه إلى وظائف أصغر. إن القدرة على تعيين مسؤولية محددة لكل وظيفة تجعل التعليمات البرمجية أكثر قابلية للقراءة وتجعل استكشاف الأخطاء وإصلاحها وتصحيح الأخطاء أسهل. يمكنك التركيز على الوظيفة الضرورية دون التأثير على أجزاء أخرى من البرنامج في حالة العثور على خطأ أو الحاجة إلى تعديل.
تحسين التعاون: تسمح الوظائف للمطورين الذين يعملون في نفس المشروع بالتعاون. يمكن تقسيم البرنامج إلى وظائف حتى يتمكن العديد من أعضاء الفريق من العمل عليها وظائف مختلفة ذات مرة. يمكن للمطورين دمج عملهم بسلاسة في الوظائف إذا تم تحديد الواجهات بشكل جيد، مما يحسن الإنتاجية ويعزز التطوير الفعال.
تمرير المعلمة: يمكنك إرسال الوسائط أو البيانات إلى دالة في لغة C حتى تتمكن من معالجتها. يمكن للوظيفة تنفيذ الإجراءات وتوليد النتائج باستخدام هذه المدخلات. يمكنك زيادة مرونة الوظائف وقابليتها للتكيف عن طريق تمرير المعلمات، مما يزيد من تنوع البرنامج بشكل عام.
قيم الإرجاع: يمكن للوظائف إرسال القيم مرة أخرى إلى الكود الذي استدعاها، مما يسمح بتوصيل نتائج تنفيذ الوظيفة. يمكنك الاستفادة من القيمة التي تم إرجاعها في مناطق أخرى من البرنامج بعد إجراء العمليات الحسابية أو معالجة البيانات داخل الوظيفة. إرجاع القيم تكون مفيدة بشكل خاص عندما تحتاج إلى حساب نتيجة أو تحديد شرط اعتمادًا على مخرجات الوظيفة.
خاتمة:
في الختام، الوظائف ضرورية لبرمجة C لأنها تعطي البرنامج التنظيم وقابلية إعادة الاستخدام والنمطية . يمكن للمطورين تجنب إنشاء نفس التعليمات البرمجية بشكل متكرر عن طريق تقسيم البرامج الضخمة إلى وظائف أصغر، مما يجعل التعليمات البرمجية أكثر فعالية وأسهل في الصيانة. يمكن لأي مكان في البرنامج استدعاء وظيفة، مما يوفر المرونة ويحسن تدفق التحكم.
ال إعلان، دعوة ، و تعريف الوظائف ليست سوى عدد قليل من خصائصها العديدة. يتم إعلام المترجم بإعلان وظيفة الاسم والحجج ، و نوع الإرجاع . من الممكن استدعاء دالة مع أو بدون حدود ومع أو بدون أ قيمة الإرجاع . يقوم المبرمجون ببناء وظائف محددة من قبل المستخدم لتحسين إمكانية القراءة وتحسين التعليمات البرمجية الخاصة بهم، في حين أن وظائف مكتبة C مثل برينتف () و سكانف () توفير قدرات محددة مسبقا.
بشكل عام، تعد الوظائف بمثابة وحدات بناء مهمة في برمجة C، مما يوفر فوائد بما في ذلك زيادة التنظيم وإعادة استخدام التعليمات البرمجية والتتبع البسيط للبرامج الضخمة. يمكن أن تضيف استدعاءات الوظائف بعض النفقات العامة، ولكن مزاياها تفوق الحد الأدنى من نتائج الأداء. يمكن للمبرمجين كتابة برامج C فعالة ومعيارية من خلال فهم الوظائف واستخدامها.