جُمل التحكم Control Statement - جزء 2
عبارة الاختيار Switch Statement
ما هي عبارة الإختيار Switch في البرمجة ..؟؟!! و فيما تستخدم عبارة Switch في البرمجة..؟؟!! وكيف يتم كتابة Switch من خلال تعليمات لغة C# ..!! تعرف ايضاً على معاملات التعيين المركبة Compound Assignment Operators ..؟! ومعاملات الزيادة والنقصان أو ما يُعرف بـ Increment and Decrement Operators المستخدمة في لغة سي شارب..؟! وما الفرق بين عبارة الاختيار Switch وعبارة الشرط if-else..؟!!
أحد جُمل التحكم هي عبارة الإختيار Switch في البرمجة والتي تستخدم لتنفيذ إجراء معين من إجراءات متعددة في هذا المقال ستعرف على Switch وطريقة كتابة Switch في سي شارب. وكذلك سنتعرف على بعض المعاملات التي توفرها C# وهي معاملات التعيين المركبة Compound Assignment Operators ومعاملات الزيادة والنقصان أو ما يُعرف بـ Increment and Decrement Operators لنبدأ…
في هذا المقال نتعرف على :
- معاملات التعيين المركبة Compound Assignment Operators.
- معاملات الزيادة والنقصان Increment and Decrement Operators.
- عبارة الاختيار Switch Statement في C# .
- الفرق بين عبارة الاختيارSwitch وعبارة الشرط if-else.
معاملات التعيين المركبة Compound Assignment Operators
توفر C# وعدد من لغات البرمجة معاملات التعيين المركبة او ما يُعرف بـ Compound Assignment Operators هذه لاختصار العمليات الحسابية مثلاً:
بدلاً من كتابة : "a = a + 3" نكتب "a += 3"
وعند ما يستخدم المعامل ( =+) مع عملية الجمع يسمى Addition of Compound Assignment Operators و يوضح الشكل التالي معاملات التعيين المركبة Compound Assignment Operators للعمليات الحسابية :
معاملات الزيادة والنقصان Increment and Decrement Operators
توفر C# معاملات الزيادة والنقصان أو ما يُعرف بـ Increment and Decrement Operators والتي تعمل على جمع أو طرح 1 من متغير رقمي:
- ( ++) عامل الزيادة الأحادي The unary increment operator.
- ( -- ) عامل الانقاص الأحادي The unary decrement operator.
ويوضح الشكل التالي أنواع معاملات الزيادة والنقصان Increment and Decrement Operators :
نلاحظ وجود نوعين لكل معامل من معاملات الزيادة والنقصان وهي :
- بادئة Prefix و تعني اجري عملية على المتغير قبل التنفيذ.
- لاحقه Postfix و تعني اجرى العملية على قيمة المتغير بعد التنفيذ.
لاحظ /ي نتيجة التنفيذ للكود في الأمثلة التالية :
int a = 5 , b = 5 ;
Console.WriteLine(a);
//demonstrate prefix increment operator
Console.WriteLine(++a);
//demonstrate postfix increment operator
Console.WriteLine(a++);
Console.WriteLine(a);
//demonstrate prefix decrement operator
Console.WriteLine(--b);
//demonstrate postfix decrement operator
Console.WriteLine(b--);
Console.WriteLine(b);
ليكون الـ output كالتالي
5 6 6 7 4 4 3
ملاحظة: في سي شارب يمكن العمل مع معاملات الزيادة والنقصان فقط مع المتغيرات ولا تعمل ضمن التعبيرات الحسابية Arithmetic Expression.
عبارة الاختيار Switch Statement في C#
في مقال عن الجملة الشرطية if…else ذكرنا أن جملة اتخاذ القرار تستخدم لإدارة عملية لتنفيذ التعليمات البرمجية ، أي نقوم بعمل خيارات متعددة للتنفيذ مرتبطة بقيمة معينة إن لم ينفذ جملة if سينفذ جملة else المرتبطة بها وإن احتوت جملة else على جملة if أخرى سيقوم الـ Compiler باختبارها وان لم تتحقق سيذهب الى else التي المرتبطة بـ if الثانية... وهكذا سنأخذ مثال لنرى كيف يمكن تمثيل خوارزمية بخيارات متعددة مثلاً :
If a grade is greater than or equal to 90
display “A”
else
If a grade is greater than or equal to 80
display ”B”
else
If a grade is greater than or equal to 70
display “C”
else
If a grade is greater than or equal to 60
display “D”
else
display “F”
هذه الخوارزمية يمكن تمثيلها بأكثر من طريقة في C# وهذا عن طريق if…else كما نعرف او عن طريق عبارة switch فهذه العبارات تحدد التعليمات التالية المطلوب تنفيذها من عدد من الخيارات المحتملة بناءً على قيمة تعبير ما :
- عبارة if…else تحدد بيانًا ليتم تنفيذه بناءً على قيمة التعبير المنطقي
- عبارة switch تحدد قائمة جمل لتنفيذها بناءً على تطابق قيمة مع متغير أو تعبير معيين .
لاحظ /ي طريقة التنفيذ في حال if…else في المثال التالي :
Console.Write(" Please enter the grade between 1 and 100 :" );
int grade = Convert.ToInt32(Console.ReadLine());
if ( grade >= 90)
Console.WriteLine('A');
else if ( grade >= 80)
Console.WriteLine('B');
else if ( grade >= 70)
Console.WriteLine('C');
else if ( grade >= 60)
Console.WriteLine('D');
else
Console.WriteLine('F');
في سي شارب تعمل جملة الـ "Switch" على المقارنة المتعددة لقيمة معينة مع مجموعة متنوعة من القيم المحتملة. و باستخدام هذه المقارنة، يمكننا تحديد التكوين الصحيح لتنفيذ الكود الموافق لكل قيمة. يتم تحقيق ذلك باستخدام "حالات" (Cases) تحوي كودًا يتم تنفيذه عندما تطابق قيمة معينة.
في جملة الاختيار switch يتم اختيار قيمة معينة لتنفيذ حالة من حالات متعددة فتنفذ هذه الإجراءات بناءً على هذه القيمة. هذه القيمة تكون تكون مرجعة من متغير أو تعبير برمجي. تعبير switch ينفذ الإجراءات لأول حاله قيمتها مطابقة للقيمة المرجعة ويتجاهل التنفيذ لبقية الحالات ويجب أن تكون القيمة في الحالة مطابقة تماما للقيمة المرجعة من نوع المتغير أو حتى حالة الأحرف فـ Compiler ينشئ خطأ عندما تحتوي عبارة التبديل على حالة غير قابلة للوصول.
ويوضح الـ UML diagram طريقة عمل switch في البرمجة:
والصيغة العامة للـ switch في C#
switch(expression) {
case constant-expression1 :
statement(s);
break;
case constant-expression2 :
statement(s);
break;
case constant-expression3 :
statement(s);
break;
default : // Optional
statement(s);
}
الكلمات المحجوزة المستخدمة مع switch في C#
وتوفر سي شارب بعض الكلمات المحجوزة والتي يمكن أن تستخدم مع جملة switch وهي :
- switch وتعلن عن عبارة switch وتحتوي على القيمة المراد مطابقتها مع حالات switch.
- case لتعريف حالة جديدة من حالات switch.
- break تكتب في نهاية تعليمات كل حالة من حالات switch للخروج من الـ switch في حال تنفيذ احدى الحالات.
- default وتستخدم لتعريف الحالة الافتراضية في لم يتم التطابق مع أي حالة من حالات switch ستنفذ التعليمات في default ويخرج من الـ switch وهي اختيارية لكن يفضل اضافتها.
أيضا الأقواس {...} مهمة لتحديد الإجراءات الخاصة لكل حالة .
في هذا المثال نلاحظ طريقة التنفيذ للخوارزمية السابقة بواسطة switch :
Console.Write(" Please enter the grade between 1 and 100 :" );
int grade = Convert.ToInt32(Console.ReadLine());
switch(grade / 10){
case 9:
case 10:
Console.WriteLine('A');
break;
case 8:
Console.WriteLine('B');
break;
case 7:
Console.WriteLine('C');
break;
case 6:
Console.WriteLine('D');
break;
default:
Console.WriteLine('F');
break;
}
تعتبر switch من جُمل التحكم المستخدمة في العديد من لغات البرمجة، مثل C، C++، Java ,JavaScript وغيرها. وتستخدم هذه العبارة لتحويل التنفيذ في البرنامج بناءً على قيمة متغير محدد.كما أن هنالك بعض النقاط الهامة عن جملة Switch يجب معرفتها عن Switch فيما يلي أهمها:
- استخدام التعليمات المعقدة: يمكن استخدام العبارات المعقدة (complex expressions) كقيم مقارنة داخل حالات الـ "case". يمكن استخدام العبارات المعقدة لإجراء مقارنات متقدمة أو استنتاجات معقدة لتحديد التكوين الصحيح لتنفيذ الكود.
- التعامل مع أنواع بيانات مختلفة: يمكن استخدام جملة الـ Switch مع أي نوع من البيانات، بدءًا من الأعداد الصحيحة ووصولًا إلى النصوص والأنواع المخصصة. يمكن تعديل الكود وفقًا لنوع البيانات المراد استخدامها في المقارنة.
- تداخل الحالات: يمكن أن تحتوي حالات الـ "case" على أكود مشتركة. على سبيل المثال، يمكن وضع مجموعة من الحالات تحت بعضها البعض دون كلمة "break" لتنفيذ نفس الكود لمجموعة من الحالات المتطابقة.
عادةً ما يتم استخدام switch لتبسيط بناء الشروط الضرورية لاتخاذ قرارات في البرنامج. حيث تقوم switch بتقسيم قيمة المتغير المحدد إلى مجموعة من القيم المختلفة، ثم يقوم بتحويل تدفق التنفيذ إلى الحالة المطابقة للقيمة. ويمكن استخدام switch لإجراء تحكم في التنفيذ إذا كانت هناك عدة حالات ممكنة لقيمة المتغير المحدد.
الفرق بين عبارة الاختيارSwitch وعبارة الشرط if-else
هناك عدة اختلافات بين عبارة الاختيار Switch Statement وعبارة الشرط if-else في لغة C# . فيما يلي بعض الاختلافات الرئيسية بينهما:
- هيكل الكود: في عبارة الشرط if-else، يتم استخدام تعبير مشروط واحد (مثل if ) يتم تقييمه لتحديد مسار التنفيذ. أما في عبارة الاختيار Switch Statement، يتم تحديد عدة حالات (cases) تستند إلى قيمة متغير التحكم.
- قيمة المقارنة: في عبارة الشرط if-else ، يمكن استخدام أي تعبير مشروط يعيد قيمة منطقية (true أو false) لتحديد التنفيذ. أما في عبارة الاختيار Switch Statement ، يتم مقارنة قيمة واحدة فقط بين قيمة متغير التحكم والحالات المحددة.
- التعقيد والقراءة: عبارة الشرط if-else تستخدم عادة لاختبار شروط معقدة ومتعددة، حيث يمكن استخدام مجموعة من العبارات المشروطة المتداخلة. بالمقابل، عبارة الاختيار Switch Statement تستخدم لاختبار قيمة واحدة وتوفر هيكلًا أكثر تنظيمًا وسهولة في القراءة.
- الأداء: في بعض الحالات، عبارة الاختيار Switch Statement يمكن أن تكون أكثر كفاءة من عبارة الشرط if-else ، خاصة عندما يكون هناك عدد كبير من الحالات. هذا يعود إلى طريقة تنفيذ عبارة الاختيار Switch Statement التي تستخدم جدولًا للانتقال (jump table)، مما يؤدي إلى تنفيذ أسرع للكود.
- القيود: عبارة الاختيار Switch Statement تفرض بعض القيود على نوع البيانات التي يمكن استخدامها كقيمة لحالاتها. على سبيل المثال، يجب أن تكون قيمة متغير التحكم من الأنواع القابلة للتحويل (convertible) إلى نوع البيانات المستخدم في كل حالة.
عند الاختيار بين عبارة الشرط if-else وعبارة الاختيار Switch Statement في لغة C# ، يجب أخذ هذه الاختلافات في الاعتبار واختيار البنية التي تناسب أفضل متطلبات المشروع وقراءة كود وأداء التطبيق.
إلى هنا ينتهي هذا المقال عن جملة Switch في لغة C# تعرفنا فيه الغرض من استخدام جملة switch وطريقة بناؤها بواسطة تعليمات لغة C# . بالإضافة الى شرح معاملات التعيين المركبة Compound Assignment Operators ومعاملات الزيادة والنقصان أو ما يُعرف بـ Increment and Decrement Operators المستخدمة في C# .أخيراً، شرح المقال أوجه الاختلاف بين عبارة الاختيار Switch و الجملة الشرطية if-else .