freeCodeCamp/guide/arabic/c/switch/index.md

5.3 KiB

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 عرضة للأخطاء أيضا. يمكن أن يفسد لك بيان آخر في الفوضى. كما أن إضافة / إزالة العلامات أسهل مع مفتاح التبديل ويجعل من السهل تغيير التعليمات البرمجية الخاصة بك وصيانتها.