recent
أخبار ساخنة

التعرف على الدوال Functions و إستعمالاتها في لغة السي C الدرس|13|

الصفحة الرئيسية

 

الدوال Function في لغة سي C

في الدروس السابقة تعرَّفنا على مُقدمة البرمجة بلغة سي إبتداءً من امر الطباعة printf و تعريف المتغيرات "int,string,boolean,float,char,double" و تعرَّفنا على طريقة إستقبال المُدخَلات من المُستخدِم عبر scanf و المقصود بالمستخدم هو أي شخص يقوم بإستخدام البرنامج دون أن يرى الكود الخاص بالبرنامج ثم تعرَّفنا على ادوات التحكم المنطقية و هي جملة if,switch و غيرها و جمل الدوران for,while, و في الدروس القادمة سوف نتعرف على مفهوم الدوال Functions و مصطلح دالة قد يكون مألوفاً في الرياضيات لكن في البرمجة له معاني اعمق من الرياضيات, سوف نتعرَّف على كيفية إنشاء دالة و انواعها و كيفية إستعمال بعض الدوال الموجودة في لغة سي ثم سنتعرف على مفهوم جديد و هو المصفوفات Arrays و كيفية إنشائها و كيف نتعامل مع النصوص في لغة سي.

اغلب البرامج التي نراها هي اكبر بكثير مما كنا نقوم بالعمل به في الدروس السابقة و افضل طريقة لإنشاء و صيانة البرامج الكبيرة هي تقسيم البرنامج إلى اكثر من قطعه برمجية, حيث أن كل قطعة تقوم بأداء مهام خاصة و بذلك تكون صيانة كل قطعه على حدى اسهل بكثير من لو وقعت مشكلة في برنامج كبير ذو قطعه واحدة.

تعرَّفنا في السابق على دالة int main و هي نقطة البداية في أي برنامج سي C و كل ما يسعى إليه المبرمجون الجيدوُن هو تقليل عدد الأسطر الموجودة في دالة int main و توزيعها في دوال اخرى.

مثال 1

#include <stdio.h>
#include <stdlib.h>
void printMuhammad(){
    printf("Muhammad Alush \n python \n javascript \n java \n c++ \n \n");
}
void printSaja(){
    printf("Saja Osman \n C \n PHP \n \n");
}
void printKaissar(){
    printf("Ahmed Kaissar \n html \n css \n laravel \n \n");
}
int main(int argc, char** argv) {
    printMuhammad();
    printSaja();
    printKaissar();
    return 0;
}

 

شرح المثال السابق

نُلاحظ أننا قُمنا بتعريف ثلاثة دوال void و هذه الدوال هي: الأولى إسمها printMuhammad تقوم هذه الدالة بطباعة إسم محمد و اللغات التي يقدمها على هذا الموقع و الدالة الثانية هي printSaja و هذه تقوم بطباعة إسم سجى و اللغات التي تقدمها على موقعنا و الدالة الثالثة هي printKaissar تقوم هذه الدالة بطباعة اللغات التي يقدمها أحمد على موقعنا, ثم دخلنا للدالة main و قمنا بإستدعاء كل دالة بإسمها كما كتبناه في الأعلى مع وضع القوسين بنهاية كل دالة للتعريف بها و عند تشغيل الكود السابق سنحصل على النتيجة التالية


خُلاصة هذا المثال هو بدلاً من كتابة كل الأوامر في الدالة main قمنا بتوزيعها في دوال منفصلة, بيانات كل إسم في دالة لوحده ثم قُمنا بإستدعائها فقط من خلال الدالة main.


مثال 2

اكتب برنامج يحتوي على دالة إسمها printLink تقوم بطباعة رابط programmer tech.

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    printLink();
    return 0;
}
void printLink()
{
    printf("www.programmer-tech.com \n");
}

 

شرح البرنامج السابق 2

لقد قُمنا ببناء دالة printLink و كتبنا لها أن مُهمتها هي طباعة رابط موقعنا ثم النزول سطر جديد, هذا كان في خارج الدالة main ثم في داخل الدالة main قُمنا بكتابة أمر إستدعاء هذه الدالة عبر كتابة إسمها, و عند تشغيل هذا الكود سوف يُعطينا خطأ و لا يطبَع لنا النتيجة التي نُريدها و يكون الخطأ هو أن الدالة main لم تتعرَّف على أمر إستدعاء الدالة printLink بإسمها و أنها غير معرّفة و السبب يعود هو أن في برامج السي C التعليمات البرمجية تتنفذ سطراً سطراً من الأعلى إلى الأسفل فيبدأ في include ثم int main و غيره إلى نهاية البرنامج لكن في كودنا السابق سوف يأتي المترجم إلى أمر الإستدعاء printLink فيقول المحرر أنا لم ارى هذه الدالة في الأعلى و لن يستطيع التعرّف عليها لأنها في الأسفل, و الحل هو نقلها للأعلى فوق int main.

#include <stdio.h>
#include <stdlib.h>
void printLink()
{
    printf("www.programmer-tech.com \n");
}
int main(int argc, char** argv) {
    printLink();
    return 0;
}

 

و عند نقله و تشغيله, البرنامج سوف يَمُر على تعريف الدالة في الأعلى ثم بعد ذلك سوف يمر على دالة main و سيرى الدالة و يقول لقد قمت برؤيتها في الأعلى و عند التشغيل ستكون النتيجة هي


ملاحظة

كما قُلنا بأن الدالة main هي نقطة البداية لأي برنامج فلنمثلها بالمدير و هناك بعض الدوال المعرفة في البرنامج مثل myLink فلنمثلهم الموظفين فإذا قامت الدالة main بإستدعاء الموظف لأداء مهمة ما تقوم الدالة main بإنتظار الموظف حتى ينتهي من عمله و لا تبالي بكيفية اداء عمله, المهم أن يقوم بالإنتهاء من المهمة.

 

هذه هي الدوال و اول نوع من انواع الدوال هو النوع void الذي يقوم بتنفيذ الأوامر المكتوبة فيه و لا يحمل أي قيمة حيث أن بعض الدوال مثل دوال الرياضيات لها قيمة ناتجة بعد تنفيذ عمليتها و سوف نتطرق لهذا الأمر في الدروس القادمة.

إضغط هنا لقراءة الدرس السابق

google-playkhamsatmostaqltradent