recent
أخبار ساخنة

القيم المعادة من الدوال في لغة السي C الدرس|15|

الصفحة الرئيسية
Return type functions c

الدوال التي تعيد قيمة Return type functions لغة السي

القيم المعادة من الدوال return type, في الدروس السابقة تحدثنا عن الدوال Function التي لا تقوم بإرجاع قيم و سوف نتعرف في هذا الدرس ما هو المقصود بإرجاع قيم.

تخيّلنا أن الدالة main هي المدير Manager و الدالة الأٌخرى هي الموظف Client و الدالة main هي التي تقوم بإستدعاء الدالة الأٌخرى و كل دالة تقوم بإستدعاء الدالة الأخرى تكون هي من يطلٌب الطلب.

لنتخيل ما يلي:

أن أب يستدعي الإبن للذهاب إلى السوق و الأب هو main و الإبن هو دالة اُخرى تقوم بالذهاب إلى السوق.

فإذا استدعى الأب إبنه و قال إذهب إلى السوق فهو لم يقٌم بإعطاءه أي مٌعطيات أو مُعاملات و لم يطلُب منه إرجاع أي شيئ و هذا هو اول نوع من الدوال "حيث لا يوجد مُعطيات و لا يتطلّب أي مُرجعات".

فإذا قال الأب للإبن إذهب إلى السوق و خُذ دينار فهو قام بتمرير مٌتغير و هو الدينار لكن لا يزال لم يطلُب من الإبن بإرجاع أي شيئ و هذا النوع الثاني من الدوال "حيث توجد مُعطيات و هي المال و لا يتطلب أي مُرجعات".

أما إذا قال إذهب إلى السوق و خُذ دينار و آتني ببطاطا فإن الأب يطلُب من الإبن أن يأخذ الدينار و يقوم بالذهاب إلى السوق ثم يرجع للأب مع البطاطا أي أنه أرجَع له قيمة و هذا النوع الثالث من الدوال.

و قد يقول الأب إذهب إلى السوق و آتني ببطاطا و لم يُعطِه أي شيئ فمعنى هذا أن الإبن يجب أن يتصرَّف أن يأخذ مال من أي مكان آخر و يذهَب إلى السوق وهذا هو النوع الرابع من الدوال.

 

أنواع الدوال التي تعيد قيمة return type لغة سي

  1. يكون بدون معطيات وبدون مرجعات.
  2. مع معطيات وبدون مرجعات.
  3. مع معطيات ومع مرجعات.
  4. بدون معطيات ومع مرجعات.

سوف نقوم بشرح جميع أنواع الدوال بالتفصيل موضحاً التعامل معها عبر أمثلة لكل نوع.


الدوال التي تعيد قيمة (بدون معطيات وبدون مرجعات)

#include <stdio.h>
#include <stdlib.h>
void potato()
{
    printf("potato \n");
}
int main(int argc, char** argv) {
    potato();
    return 0;
}

لقد قُمنا بإنشاء دالة من نوع void و إسمها potato و كانت هذه الدالة مُهمتها طباعة كلمة بطاطا potato فقط.

ثم تقوم بالنزول سطراً جديداً و ثم قُمنا بالدخول إلى الدالة main و قُمنا بإستدعاء هذه الدالة عبر كتابة إسمها فقط potato().

و عند تشغيل الكود السابق سوف نحصل على النتيجة.

potato

نلاحظ بأن هذا النوع لم نقوم بإعطاءه أية معطيات و لم نقم بالطلب منه إرجاع أي شيئ

 

الدوال التي تعيد قيمة (مع معطيات وبدون مرجعات)

#include <stdio.h>
#include <stdlib.h>
void potato()
{
    printf("potato \n");
}
void printNumberPotato(int number)
{
    for(int i = 0; i < number; i++)
        printf("potato \n");
}
int main(int argc, char** argv) {
    potato();
    printNumberPotato(4);
    return 0;
}

انشأنا دالة void تقوم بطلب معطيات عددية int و إسم هذه الدالة هو printNumberPotato.

م دخلنا لحلقة for loop و قُلنا i تساوي 0 و i اصغر من المُتغير number و تقوم بزيادة 1 في كل دورة و يقوم في كل دورة بطباعة كلمة potato و ينزل سطراً جديداً.

ومن ثم دخلنا للدالة main لتشغيلها عبر إستدعائها بإسمها printNumberPotato و مررنا لها القيمة 4 لأنه في الأعلى وضعنا أنه يلزَم تمرير قيمة.

وعند تشغيل هذا البرنامج سوف يطبَع لنا كلمة potato خمس مرات و عند تشغيله سنجد نتيجته.

potato
potato
potato
potato
potato

هذا هو النوع الثاني بحيث أنه من نوع void مع قيمة مُدخلة

 

الدوال التي تعيد قيمة (مع معطيات ومع مرجعات)

#include <stdio.h>
#include <stdlib.h>
void potato()
{
    printf("potato \n");
}
void printNumberPotato(int number)
{
    for(int i = 0; i < number;
        printf("potato \n");
}
int power(int number)
{
    return number * number;
}
int main(int argc, char** argv) {
    int result = power(4);
    printf("%d", result);
    return 0;
}

أنشأنا دالة إسمها power يعني التربيع من اجل إرجاع قيمة مربعة و طلبنا أن القيمة الممررة هي عددية number و تقوم هذه الدالة بطباعة إرجاع قيمة القيمة الممررة مضروبة بنفسها number*number أي إرجاع القيمة المربعة لهذا المعامل.

وفي الدالة main وضعنا متغير عددي result يقوم بإستقبال القيمة المُرجعة من الدالة power و ضربِها بنفس القيمة.

ثم طَلَبنا طِباعة القيمة المُرجعه فعلى سبيل المثال مرَّرنا له القيمة 6 سوف تقوم بضربها في 6 و يكون الناتج 36 لكن في برنامجنا مرّرنا له القيمة 4.

و عند التشغيل نحصل على النتيجة

potato

كما نلاحظ لقد طبع لنا الرقم 16 لأن القيمة كان 4 و ضربها في نفسها

 

الدوال التي تعيد قيمة (بدون معطيات ومع مرجعات)

#include <stdio.h>
#include <stdlib.h>
int power(int number)
{
    return number * number;
}
void power2(int number)
{
    printf("%d", number * number);
}
int main(int argc, char** argv) {
    power2(6);
    return 0;
}

قمنا بنسخ الدالة power في المثال السابق و أسميناها power2 و تقوم بطباعة قيمة عددية و هي number*number.

و قمنا في البرنامج الرئيسي بإستدعائها بإسمها و تمرير الرقم 6 لها.

وعند تشغيل البرنامج ستكون النتيجة.

9

الدالة ذات القيمة المُرجعة يجب إستقبال قيمتها من الدالة التي قامت بإستدعائها و هي الدالة main و يجب تعريفها حسب نوع القيمة المُراد إرجاعها.

ويمكننا تعريف الدوال بأي نوع من انواع البيانات التي تعلمناها مسبقاً مثل (int, float, doubel, boolean) و غيرها.

لكن لا يجب ابداً نسيان وضع return في نهاية تعريف كل دالة تقوم بإرجاع قيمة.

google-playkhamsatmostaqltradent