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