مضى على الشبكة و يوم من العطاء.

البرمجة الكائنية (enum)

Sadell_AliSadell_Ali is verified member.

الرقابة والتنظيم
.:: الرقابة والتنظيم ::.
.:: طاقم المشرفين ::.

السمعة:

بِسْمِ اللَّـهِ الرَّحْمَـٰنِ الرَّحِيمِ

اليوم رح يكون موضوعنا عن مفهوم enum , هو الصراحة المفهوم مش ضروري أنه الواحد يكون عارفه بس بفيد المبرمج لم يكتب كود وبسهل عليه التعامل وبعطي للكود جمالية في الكتابة وهو موضوع سلس نحكي اقرأ واستمتع ما بده هالتركيز العظيم😂 يلا نبدا
النوع( enum )↫ هو أختصار لكلمة لـ enumeration حيث يعني التعداد أو الترقيم ويستخدم لتعريف قائمة من القيم أو مجموعة من القيم الثابتة بشكل منطقي الا انه يعتبر هذه المجموعة كنوع جديد من البيانات و فيها عدة قيم محتملة يمكن الإختيار منها فقط الجميل في نوع ( enum ) في حال أنه أردت بناء كود مخصص فقط للتعامل مع نوع محدد من القيم وحاول اي شخص ادخال أو تمرير قيم من نوع آخر سوف يعمل على تنبيههِ مباشرةً قبل التشغيل الكود اذاً في حال أردت تعريف مجموعة قيم مترابطة يستحيل أن تتبدل فالخيار الأمثل هو تعريف هذه القيم في الأساس بداخل ( enum )
في الغالب يتم استخدام ( enum ) لقيم بأصلها لا تتغير مثل👇
  • فصول السنة ( الخريف, الشتاء, الربيع, الصيف )
  • الإتجاهات ( الشمال - الجنوب - الشرق - الغرب )
  • أيام الأسبوع ( الإثنين - الثلاثاء - الأربعاء إلخ.. )
  • الجنس ( ذكر - أنثى )
طريقة تعريف ال ( enum ) تشبه كثيراً طريقة تعريف ال ( struct) الا أنها بتختلف في طريقة التعامل مع المتغيرات فمثلاً عند وضع متغيرات بداخله يمكنك إعطاؤهم قيم بنفسك أو جعل المترجم يعطيهم قيم إفتراضية بنفسه

كود بسيط لتوضيح
C++:
#include <iostream>
using namespace std;

// تعريف نوع enum لتحديد أيام الأسبوع
enum Days {
    SUNDAY,     // 0: الأحد
    MONDAY,     // 1: الاثنين
    TUESDAY,    // 2: الثلاثاء
    WEDNESDAY,  // 3: الأربعاء
    THURSDAY,   // 4: الخميس
    FRIDAY,     // 5: الجمعة
    SATURDAY    // 6: السبت
};

// دالة لتحديد ما إذا كان اليوم المحدد هو عطلة نهاية الأسبوع
void checkWeekend(Days day) {
    // إذا كان اليوم هو السبت أو الأحد، فإنه عطلة نهاية الأسبوع
    if (day == SATURDAY || day == SUNDAY) {
        cout << "It's the weekend!" << endl;
    } else {
        cout << "It's a workday." << endl;
    }
}

int main() {
    // إنشاء متغير من النوع enum وإسناد قيمة MONDAY له
    Days today = MONDAY;
   
    // استدعاء الدالة للتحقق مما إذا كان اليوم عطلة نهاية الأسبوع
    checkWeekend(today);  // عرض النتيجة

    return 0;
}

اذاً فبدلاً من استخدام الأرقام أو القيم النصية لتحديد الأيام، مثل 1 للاثنين أو 2 للثلاثاء، استخدام enum يجعل الكود أكثر وضوحاً وسهولة للفهم اي أنه عندما نكتب SUNDAY بدلاً من 0، يكون من الواضح أن هذه القيمة تشير إلى يوم الأحد فنلاحظ هنا أنه عندما قمنا بتعريف enum، القيم داخل enum بدأت تلقائيًا من 0 الا اذا قمت أنت كمبرمج بوضع قيم خاصة بك , فالمطلوب من هذا الكود إذا كانت قيمة اليوم هي SATURDAY أو SUNDAY تطبع الدالة "It's the weekend!" أما اذا لا فتطبع الدالة "It's a workday."

الناتج عند تشغيل الكود :
C++:
It's a workday.


قبل التطرق الى مثال أخر يوجد ملاحظة مهمة وهي : لا يمكنك وضع قيم نصية (كلمات أو جمل) كقيم للثوابت التي نضعها فيه

مثال أخر
C++:
#include <iostream>

using namespace std;

// وضعنا فيه 12 ثابت مع إعطائهم قيم Months إسمه enum هنا قمنا بتعريف
enum Months
{
    Jan = 31,
    Feb = 28,
    Mar = 31,
    Apr = 30,
    May = 31,
    Jun = 30,
    Jul = 31,
    Aug = 31,
    Sep = 30,
    Oct = 31,
    Nov = 30,
    Dec = 31
};

int main()
{
    // فقط Months و الهدف منه تخزين إحدى القيم الموجودة في selectedMonth إسمه Months هنا قمنا بإنشاء كائن من
    Months selectedMonth;

    // selectedMonth في الكائن Months الموجود بالأساس في May هنا قمنا بتخزين قيمة الثابت
    selectedMonth = May;

    // May و التي تمثل عدد الأيام الموجودة في الشهر selectedMonth هنا قمنا بطباعة قيمة الثابت
    cout << "May contain " << selectedMonth << " days";

    return 0;
}
في هذا المثال قمنا بتعريف enum إسمه Months يحتوي على ثوابت قمنا نحن بإعطائهم القيم تمثل أشهر السنة و عدد الأيام الموجودة فيها.
بعدها قمنا بإنشاء كائن منه و جعلناه يساوي أحد الثوابت (أي الأشهر) الموجودة في Months و من ثم طباعة قيمته حيث أن الناتج هو👇

C++:
May contain 31 days

المميز في enum أنه يمكن استخدام الجملة switch للتشييك على قيمة الكائن الذي ننشئه منه ولتوضيحه بشكل بسيط سيتم طرح مثال

C++:
#include <iostream>

using namespace std;

// وضعنا فيه 7 ثوابت Days إسمه enum هنا قمنا بتعريف
enum Days
{
    Monday,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
};

int main()
{
    // فقط Days و الهدف منه تخزين إحدى القيم الموجودة في selectedDay إسمه Days هنا قمنا بإنشاء كائن من
    Days selectedDay;

    // selectedDay في الكائن Days الموجود بالأساس في Thursday هنا قمنا بتخزين قيمة الثابت
    selectedDay = Thursday;

    // selectedDay هنا قمنا بالتشييك على قيمة الكائن
    switch(selectedDay)
    {
        // سيتم تنفيذ أمر الطباعة التالي Thursday أو Wednesday أو Tuesday أو Monday إذا كانت تساوي قيمة الثابت
        case Monday:
        case Tuesday:
        case Wednesday:
        case Thursday:
            cout << "We are available from 8:00 AM to 4:00 PM.";
            break;

        // سيتم تنفيذ أمر الطباعة التالي Friday إذا كانت تساوي قيمة الثابت
        case Friday:
            cout << "We are available from 8:00 AM to 12:00 PM.";
            break;

        // و هنا سيتم تنفيذ أمر الطباعة التالي Sunday أو Saturday إذا كانت لا تساوي أي قيمة سابقة فهذا يعني أنها تساوي
        default:
            cout << "We are not available on vacations.";
            break;
    }

    return 0;
}

في المثال التالي قمنا بتعريف enum إسمه Days يمثل أيام الأسبوع.
بعدها قمنا بإنشاء كائن منه و جعلناه يساوي أحد الثوابت (الأيام) الموجودة في Days.
في الأخير قمنا باستخدام الجملة switch للتشيك على قيمة الكائن و على أساسها نطبع له الجملة المناسبة
الناتج
C++:
We are available from 8:00 AM to 4:00 PM.

أخر كود سيوضح كيف نستطيع تعريف دالة تأخذ باراميتر نوعه enum
C++:
#include <iostream>

using namespace std;

// وضعنا فيه ثابتين Gender إسمه enum هنا قمنا بتعريف
enum Gender
{
    Male,
    Female
};

// Gender عند استدعاءها يجب أن نمرر لها قيمة عبارة عن كائن من printInstructions هنا قمنا بتعريف دالة إسمها
void printInstructions(Gender gender)
{
    // سيتم تنفيذ أمر الطباعة الموضوع هنا Male تساوي gender إذا كانت القيمة التي مررناها لها في الكائن
    if (gender == Male)
    {
        cout << "Males should go to right building.";
    }
    // سيتم تنفيذ أمر الطباعة الموضوع هنا Male لا تساوي gender إذا كانت القيمة التي مررناها لها في الكائن
    else
    {
        cout << "Females should go to the left building.";
    }
}

// main() هنا قمنا بتعريف الدالة
int main()
{
    // فقط Gender و الهدف منه تخزين إحدى القيم الموجودة في selectedGender إسمه Gender هنا قمنا بإنشاء كائن من
    Gender selectedGender;

    // selectedGender في الكائن Gender الموجود بالأساس في Male هنا قمنا بتخزين قيمة الثابت
    selectedGender = Male;

    // و التي ستقوم بالتشييك على قيمته و من ثم طباعة جملة تناسب قيمته selectedGender و تمرير الكائن printInstructions() هنا قمنا باستدعاء الدالة
    printInstructions(selectedGender)

    return 0;
}

في البداية قمنا بتعريف enum إسمه Gender يمثل أنواع الجنس (ذكر, أنثى)
بعدها قمنا بتعريف دالة إسمها printInstructions عند استدعاءها نمرر لها كائن من Gender فتقوم بالتشييك على قيمته و على أساسه تقوم بطباعة نص محدد
وفي الأخير قمنا بإنشاء كائن من Gender و قمنا بتمريره للدالة printInstructions
حيث أن النتيجة للكود
C++:
Males should go to right building.



وهيك بإذن الله بنكون استكملنا المعلومات الخاصة بال enum

🌸
يعطيكم العافية🌸
 
شكرآ لك على المشاركه الجميله مع انني اكره enumeration ولا استخدمها ولا اذكر انني استخدمتها اطلاقآ

لكن ملاحظه بسيطه يفضل اختصار الكود حتى المتابع يستوعب بشكل افضل كما تعلم ان لغة سي بلس بلس ليست سهلة التعلم .

كمثال :

C++:
#include <iostream>

enum Days {
    SUNDAY,     // 0: الأحد
    MONDAY,     // 1: الاثنين
    TUESDAY,    // 2: الثلاثاء
    WEDNESDAY,  // 3: الأربعاء
    THURSDAY,   // 4: الخميس
    FRIDAY,     // 5: الجمعة
    SATURDAY    // 6: السبت
};
int main() {
    Days today = MONDAY;
     if (today == SATURDAY || today == SUNDAY)
        std::cout << "It's the weekend!" << std::endl;
        std::cout << "It's a workday." << std::endl;
    return 0;
}

حتى يسهل فهم الكود على المتابع .

بارك الله فيك استمر في الطرح​
 

آخر المشاركات

عودة
أعلى