Files
freeCodeCamp/guide/arabic/c/switch/index.md
2019-06-20 16:33:33 -05:00

5.2 KiB

title, localeTitle
title localeTitle
Switch Case تبديل القضية

تبديل القضية

يشبه عبارة switch جملة من if statements .

إنها قائمة بالإمكانيات ، مع إجراء لكل احتمال ، وإجراء افتراضي اختياري ، في حالة عدم تقييم أي شيء آخر إلى true.

نحن الخروج من التبديل عن طريق break . إذا لم يتم الوصول إلى بيان break قبل بداية الحالة التالية ، فسينتهي التنفيذ ويبدأ تنفيذ الشفرة في الحالة التالية.

بناء الجملة من التبديل ... القضية

switch (n) 
{ 
   case constant1: 
       // code to be executed if n is equal to constant1; 
       break; 

   case constant2: 
       // code to be executed if n is equal to constant2; 
       break; 
       . 
       . 
       . 
   default: 
       // code to be executed if n doesn't match any constant 
} 

مثال

باستخدام عبارة switch عبر عدة if / else يمكن أن تساهم في زيادة السرعة والقابلية للقراءة.

# include <stdio.h>

int main() {

    char operator;
    double firstNumber,secondNumber;

    printf("Enter an operator (+, -, *, /): ");
    scanf("%c", &operator);

    printf("Enter two operands: ");
    scanf("%lf %lf",&firstNumber, &secondNumber);

    switch (operator) {
        case '+':
            printf("%.1lf + %.1lf = %.1lf",firstNumber, secondNumber, firstNumber+secondNumber);
            break;
        case '-':
            printf("%.1lf - %.1lf = %.1lf",firstNumber, secondNumber, firstNumber-secondNumber);
            break;
        case '*':
            printf("%.1lf * %.1lf = %.1lf",firstNumber, secondNumber, firstNumber*secondNumber);
            break;
        case '/':
            printf("%.1lf / %.1lf = %.1lf",firstNumber, secondNumber, firstNumber/firstNumber);
            break;
        // Operator is doesn't match any case constant (+, -, *, /)
        default:
            printf("Error! operator is not correct");
    }

    return 0;
}

انتاج:

-> Enter an operator (+, -, *,): -
-> Enter two operands: 32.5
-> 12.4
-> 32.5 - 12.4 = 20.1

مراجعة: التبديل ضد إذا كان آخر

  • تحقق من اختبار التعبير: يمكن لبيان if-then-else أن يختبر التعبيرات على أساس نطاقات من القيم أو الشروط ، في حين يختبر بيان التبديل تعبيرات تستند فقط إلى عدد صحيح واحد أو قيمة تعدادية أو كائن سلسلة.
  • التبديل بشكل أفضل للتفرع متعدد المسارات: عندما يقوم المترجم بتجميع بيان التبديل ، سيقوم بفحص كل من ثوابت الحالة وإنشاء "جدول قفزة" يستخدمها لتحديد مسار التنفيذ اعتمادًا على قيمة التعبير. لذلك ، إذا كنا بحاجة إلى الاختيار من بين مجموعة كبيرة من القيم ، فسيتم تشغيل عبارة التبديل بشكل أسرع من المنطقي المكافئ المشفر باستخدام تسلسل if-elses. يستطيع المحول البرمجي القيام بذلك لأنه يعلم أن ثوابت الحالة هي جميعها من نفس النوع ويجب ببساطة المقارنة بينها وبين تعبير التبديل ، بينما في حالة وجود تعبيرات ، لا يمتلك المجمع أي معرفة من هذا القبيل.
  • if-else أفضل للقيم المنطقية: إذا كانت الفروع الشرطية ، إذا كانت أخرى ، رائعة بالنسبة للظروف المتغيرة التي تتحول إلى قيمة منطقية ، في حين أن عبارات المحول تعتبر كبيرة بالنسبة لقيم البيانات الثابتة.
  • السرعة: قد يتبين أن بيان التبديل أسرع من العدد المتوفر إذا كان عدد الحالات جيدًا. إذا لم يكن هناك سوى عدد قليل من الحالات ، فقد لا يؤثر ذلك على السرعة في أي حال. تفضل التبديل إذا كان عدد الحالات أكثر من 5 غير ذلك ، يمكنك استخدام if-else أيضًا.
  • إذا كان رمز التبديل يحتوي على أكثر من خمسة عناصر ، فإنه يتم تنفيذه باستخدام جدول بحث أو قائمة تجزئة. وهذا يعني أن جميع العناصر تحصل على وقت الوصول نفسه ، مقارنةً بقائمة ما إذا: s حيث يستغرق آخر عنصر وقتًا أطول للوصول إليه نظرًا لتقييم كل حالة سابقة أولاً.
  • الوضوح في سهولة القراءة: يبدو التبديل أكثر نظافة عندما يتعين عليك دمج الحالات. Ifs عرضة للأخطاء أيضا. يمكن أن يفسد لك بيان آخر في الفوضى. كما أن إضافة / إزالة العلامات أسهل مع مفتاح التبديل ويجعل من السهل تغيير التعليمات البرمجية الخاصة بك وصيانتها.