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

87 lines
5.3 KiB
Markdown

---
title: Switch Case
localeTitle: تبديل القضية
---
# تبديل القضية
يشبه عبارة switch جملة من `if statements` .
إنها قائمة بالإمكانيات ، مع إجراء لكل احتمال ، وإجراء افتراضي اختياري ، في حالة عدم تقييم أي شيء آخر إلى true.
نحن الخروج من التبديل عن طريق `break` . إذا لم يتم الوصول إلى بيان `break` قبل بداية الحالة التالية ، فسينتهي التنفيذ ويبدأ تنفيذ الشفرة في الحالة التالية.
## بناء الجملة من التبديل ... القضية
```c
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 عرضة للأخطاء أيضا. يمكن أن يفسد لك بيان آخر في الفوضى. كما أن إضافة / إزالة العلامات أسهل مع مفتاح التبديل ويجعل من السهل تغيير التعليمات البرمجية الخاصة بك وصيانتها.