loader image
تخطى إلى المحتوى الرئيسي
متطلبات الإكمال

الهدف من الدرس:

الهدف من هذا الدرس هو تعلم كيفية تعريف واستخدام الدوال في C++ وكيف يتم تمرير المعاملات إليها بطرق مختلفة. إن فهم الدوال يعمل على تقليل تكرار الكود، وتحسين التنظيم، وزيادة القابلية للقراءة.

مقدمة إلى الدوال:

تعتبر الدوالُّ واحدةً من أساسيات البرمجة التي تساعد على تقليل تكرار الكود عن طريق تمكين المبرمجين من إنشاء كتلِ إعادةِ استخدامٍ من التعليمات البرمجية؛ لأداء وظائفَ معينة، وهذا يُحسّن تنظيمَ البرامج ويجعلها أكثر وضوحًا وسهولة في الفهم.

 عندما نقوم بتعريف دالّةٍ، يجب تحديد أربعةِ مكونات رئيسةٍ: 1- نوع الإرجاع، 2- واسم الدالة، 3- والمعاملات، 4-وكتلة الجسم.

تعريف الدوالّ:

يتطلّب تعريفُ الدالّةِ تحديدَ نوعِ القيمة التي ستُرجِعُها الدّالّةُ عند الانتهاء من عملها، وإذا لم تكن الدالة تُرجع قيمة، نستخدم النوع void ثم نحدّد اسمًا فريدًا للدالةِ يُستخدم لاستدعائها في البرنامج، بعد ذلك نحدّد المعاملاتِ الضروريةَ داخلَ القوسين إذا كان هناك حاجة لأيٍّ منها، ونسردُ تنفيذَ الدالة داخل الأقواس {}.

صيغة الدالة:

return_type function_name(parameter1_type parameter1, parameter2_type parameter2 ...) {
    //
تعليمات تنفيذ الدالة
    return value; // (
إذا كانت الدالة تُرجع قيمة)
}

 

مثال:

#include <iostream>

int add(int a, int b) {
    return a + b; //
ترجع مجموع العددين
}

int main() {
    int sum = add(5, 10);
    std::cout << "
المجموع: " << sum << std::endl;
    return 0;
}

 

إعلان الدوال وتعريفها:

يمكنك إعلان الدوال (تقديم النماذج الأولية لها) قبل main()  أو في ملف رأس (header) منفصل.

 يحتوي الإعلان على اسم الدالة، وأنواع الإرجاع والمعاملات، دون تضمين جسم الدالة.

الإعلان:

int add(int a, int b); // نموذج إعلان الدالة

التعريف:

هذه هي عملية تحقيق جسم الدالة ويمكن أن تظهر بعد main()، طالما كان هناك إعلانٌ مسبّق لها.

تمرير المعاملات:

من الضروريّ معرفة أن هناك ثلاثَ طرقٍ رئيسةٍ لتمريرِ المعاملات في C++ :

التمرير بالقيمة: يتم نسخ القيمة الفعلية للمعاملات إلى الدالة، وأي تغييرات عليها لا تؤثر على الأصل.

void increment(int num) {    
    num++; //
لن يؤثر على القيمة الأصلية
}

 

التمرير بالإشارة: يُمرّرُ عنوان المتغير الأصلي إلى الدالة، مما يعني أن التغييرات تُؤثِّر على المتغيرة الأصلية.

void increment(int &num) {
    num++; //
سيؤثر على المتغيرة الأصلية
}

 

التمرير بالمؤشر: يشبه التمرير بالإشارة، لكنّه يستخدم مؤشرات؛ لتغيير القيمة في الذاكرة.

void increment(int *num) {
    (*num)++; //
تُستخدم لإجراء تعديلات مباشرة على القيمة الأصلية
}

 

عبارة الإرجاع:

    تنهي عبارة الإرجاع عمليةَ تنفيذ الدالّةِ، وتعيد قيمةً إلى الدالّةِ المستدعاة. في حالة دوال void، تُستخدم لإنهاء التنفيذ مبكرًا عند الضرورة دون إرجاع قيمة.

void sayHello(bool greet) {
    if (!greet) return;
    std::cout << "
مرحباً!" << std::endl;
}

 

مثال لبرنامج يحتوي على دوال متعددة:

#include <iostream>

int multiply(int a, int b);
void greetUser(const std::string &name);

int main() {
    std::string userName;
    std::cout << "
أدخل اسمك: ";
    std::cin >> userName;
    greetUser(userName); //
استدعاء دالة التحية

    int result = multiply(6, 7);
    std::cout << "
نتيجة عملية الضرب: " << result << std::endl;
    return 0;
}

int multiply(int a, int b) {
    return a * b; //
تحقق عملية الضرب
}

void greetUser(const std::string &name) {
    std::cout << "
مرحباً " << name << "!" << std::endl;
}

المهام والتدريبات:

  • اكتب دالة تقوم بحساب عاملي الرقم واختبرها على الأرقام 5 و 7 .
  • قم بتطبيق دالة تقوم بتبديل قيمتين باستخدام التمرير بالإشارة.

يقدم هذا الدرس نظرةً شاملةً على كيفية تعريف واستخدام الدوال في برامج C++. الدوال تزيد من إنتاجية الكود وتحسن صيانته؛ لأنها تسمح للمبرمجين بكتابة كود أكثر كفاءة وتنظيمًا، مما يسهّل عملية التطوير والصيانة لاحقًا.