البرمجة

العبارات الشرطية في سي شارب

العبارات الشرطية في لغة سي شارب C#

تُعتبر العبارات الشرطية من أهم أدوات التحكم في تدفق البرامج داخل لغات البرمجة بشكل عام، ولغة سي شارب C# بشكل خاص، حيث تتيح للمبرمجين اتخاذ قرارات منطقية بناءً على تحقق شروط معينة. هذه العبارات تُستخدم لتنفيذ كتل من الأكواد أو تخطيها حسب تحقق شرط أو عدة شروط. وتُعد العبارات الشرطية من الركائز الأساسية التي تسمح بإنشاء برامج ذكية ومتجاوبة مع المدخلات أو الظروف المختلفة.

مفهوم العبارات الشرطية

العبارة الشرطية هي تركيب برمجي يسمح بتنفيذ جزء معين من الكود فقط إذا تحقق شرط منطقي (Boolean condition) معين. الشرط يُعبّر عنه عادةً بتعبير منطقي يُرجع قيمة صحيحة (true) أو خاطئة (false). بناءً على قيمة هذا الشرط، يتم تنفيذ الكود داخل الكتلة الشرطية أو يتم تخطيه.

في لغة سي شارب، تعتمد العبارات الشرطية بشكل كبير على جملة if، وكذلك على التفرعات المرتبطة بها مثل else و else if. إلى جانب ذلك، توفر اللغة عبارات شرطية متقدمة مثل switch التي تسهل التعامل مع حالات متعددة.


أنواع العبارات الشرطية في سي شارب

1. جملة if (إذا)

جملة if هي أبسط أشكال العبارات الشرطية، حيث يتم التحقق من شرط معين وإذا تحقق هذا الشرط يتم تنفيذ الكود الموضوع ضمن القوسين {}. إذا كان الشرط خاطئًا، يتم تخطي تنفيذ الكود داخلها.

الصيغة العامة:

csharp
if (condition) { // كود يتم تنفيذه إذا تحقق الشرط }

مثال عملي:

csharp
int number = 10; if (number > 5) { Console.WriteLine("الرقم أكبر من 5"); }

في المثال أعلاه، الشرط هو number > 5، وإذا كان صحيحًا يتم طباعة الرسالة.

2. جملة if-else (إذا-إلا)

تُستخدم جملة if-else لتحديد مسارين مختلفين لتنفيذ الكود، إما إذا تحقق الشرط أو إذا لم يتحقق. عند تحقق الشرط يتم تنفيذ كتلة الـ if، وإذا لم يتحقق يتم تنفيذ كتلة الـ else.

الصيغة العامة:

csharp
if (condition) { // تنفيذ إذا تحقق الشرط } else { // تنفيذ إذا لم يتحقق الشرط }

مثال عملي:

csharp
int number = 3; if (number % 2 == 0) { Console.WriteLine("الرقم زوجي"); } else { Console.WriteLine("الرقم فردي"); }

في هذا المثال يتم التحقق مما إذا كان الرقم زوجيًا أو فرديًا وطباعة النتيجة المناسبة.

3. جملة if-else if-else (سلسلة الشروط)

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

الصيغة العامة:

csharp
if (condition1) { // تنفيذ إذا تحقق الشرط 1 } else if (condition2) { // تنفيذ إذا تحقق الشرط 2 } else { // تنفيذ إذا لم يتحقق أي شرط سابق }

مثال عملي:

csharp
int score = 75; if (score >= 90) { Console.WriteLine("امتياز"); } else if (score >= 75) { Console.WriteLine("جيد جداً"); } else if (score >= 50) { Console.WriteLine("مقبول"); } else { Console.WriteLine("راسب"); }

في المثال، يتم تقييم درجة الطالب وتصنيفها حسب المعدل.

4. جملة switch (التبديل)

تُستخدم جملة switch لمعالجة حالات متعددة بطريقة أكثر وضوحًا وتنظيمًا مقارنة بسلسلة if-else if. يُستخدم هذا النوع عندما يكون لديك متغير واحد وتريد التحقق من قيمته ضمن مجموعة محددة.

الصيغة العامة:

csharp
switch (expression) { case value1: // تنفيذ عند تطابق value1 break; case value2: // تنفيذ عند تطابق value2 break; default: // تنفيذ إذا لم تتطابق أي حالة break; }

مثال عملي:

csharp
char grade = 'B'; switch (grade) { case 'A': Console.WriteLine("امتياز"); break; case 'B': Console.WriteLine("جيد جداً"); break; case 'C': Console.WriteLine("جيد"); break; default: Console.WriteLine("درجة غير معروفة"); break; }

في هذا المثال يتم طباعة التقييم بناءً على درجة الطالب.


استخدام العبارات الشرطية مع العوامل المنطقية

تتيح لغة سي شارب إمكانية دمج عدة شروط ضمن عبارة شرطية واحدة باستخدام العوامل المنطقية مثل:

  • && وتعني “و” (AND)، حيث يجب تحقق جميع الشروط.

  • || وتعني “أو” (OR)، حيث يكفي تحقق شرط واحد.

  • ! وتعني “ليس” (NOT)، لعكس قيمة الشرط.

مثال:

csharp
int age = 20; bool hasPermission = true; if (age >= 18 && hasPermission) { Console.WriteLine("مسموح بالدخول"); } else { Console.WriteLine("غير مسموح بالدخول"); }

هنا يجب تحقق الشرطين معًا للسماح بالدخول.


العبارات الشرطية المختصرة (التعبيرات الثلاثية)

توفر لغة سي شارب تعبيرًا شرطيًا مختصرًا يعرف بالتعبير الثلاثي (Ternary Operator) والذي يمكن استخدامه كبديل مختصر لـ if-else عند الرغبة في تعيين قيمة بناءً على شرط.

الصيغة:

csharp
variable = condition ? valueIfTrue : valueIfFalse;

مثال عملي:

csharp
int number = 10; string result = (number % 2 == 0) ? "زوجي" : "فردي"; Console.WriteLine(result);

في هذا المثال، يتم تعيين النص “زوجي” أو “فردي” بناءً على تحقق الشرط.


الفروقات بين if و switch

رغم أن كلاهما يُستخدم لاتخاذ قرارات في البرنامج، هناك فروقات جوهرية بين جملة if وجملة switch في سي شارب:

  • if يمكن أن يتعامل مع شروط مركبة ومعقدة تشمل المقارنات المختلفة والعوامل المنطقية.

  • switch عادةً ما يُستخدم للمقارنة المباشرة بين قيمة المتغير والثوابت.

  • switch أكثر تنظيمًا وأفضل قراءة عندما تكون الحالات محددة وعددها كبير.

  • جملة switch في سي شارب الحديثة تدعم التعبيرات النمطية (pattern matching) مما يوسع من قدراتها.


استخدام العبارات الشرطية مع الأنواع المختلفة

تُستخدم العبارات الشرطية مع مختلف أنواع البيانات في سي شارب، مثل الأعداد، الأحرف، النصوص، وحتى الأنواع المركبة.

  • في جملة if يمكن التحقق من شروط منطقية معقدة.

  • في جملة switch يمكن استخدام أنواع متعددة مثل int, char, string، وأنواع أخرى مع التحديثات الحديثة للغة.


حالات استخدام متقدمة للعبارات الشرطية في سي شارب

1. العبارات الشرطية داخل الحلقات التكرارية

تُستخدم العبارات الشرطية ضمن حلقات التكرار (for, while, foreach) للتحكم في تنفيذ أجزاء معينة من الكود حسب شرط معين أثناء كل دورة.

مثال:

csharp
for (int i = 1; i <= 10; i++) { if (i % 2 == 0) { Console.WriteLine(i + " رقم زوجي"); } }

في هذا المثال، تتم طباعة الأعداد الزوجية فقط بين 1 و 10.

2. العبارات الشرطية مع التعامل مع الاستثناءات

يمكن دمج العبارات الشرطية مع آلية معالجة الاستثناءات (try-catch) لضمان التعامل مع الحالات الاستثنائية بشكل مرن.

مثال:

csharp
try { int number = int.Parse(Console.ReadLine()); if (number < 0) { Console.WriteLine("الرقم يجب أن يكون غير سالب"); } } catch (FormatException) { Console.WriteLine("المدخل غير صالح"); }

3. التفرعات المعقدة باستخدام التعبيرات النمطية

في الإصدارات الحديثة من سي شارب (مثل C# 7.0 وما بعدها)، يمكن استخدام تعبيرات نمطية مع جملة switch لتسهيل التحقق من الأنواع والقيم المختلفة ضمن نفس البنية.

مثال:

csharp
object obj = 5; switch (obj) { case int i when i > 0: Console.WriteLine("عدد صحيح موجب"); break; case int i when i <= 0: Console.WriteLine("عدد صحيح غير موجب"); break; case string s: Console.WriteLine("نص: " + s); break; default: Console.WriteLine("نوع غير معروف"); break; }

أفضل الممارسات في استخدام العبارات الشرطية

  • تجنب التعقيد الزائد داخل الشروط، واجعل الشروط واضحة ومباشرة.

  • تقسيم الشروط الكبيرة إلى شروط فرعية أو استخدام دوال منفصلة لتحسين قابلية القراءة والصيانة.

  • استخدام switch بدلاً من سلسلة if-else if عندما يكون ذلك ممكنًا لزيادة الوضوح.

  • الانتباه إلى استخدام break في جملة switch لمنع التنفيذ المتسلسل (fall-through) إلا إذا كان مقصودًا.

  • استخدام التعبيرات الثلاثية لتقليل طول الكود في الحالات البسيطة.


تأثير العبارات الشرطية على الأداء

في معظم الحالات، تأثير العبارات الشرطية على أداء البرامج في سي شارب يكون ضئيلاً إلا إذا كانت الشروط تُنفذ بكثرة وبشكل متكرر ضمن حلقات ضيقة أو في عمليات حسابية كثيفة. لذلك من الأفضل التركيز على كتابة شروط واضحة وصحيحة، مع تحسين الأداء إذا دعت الحاجة باستخدام أدوات تحليل الأداء.


الجدول التالي يوضح مقارنة بين أنواع العبارات الشرطية الأساسية في سي شارب:

النوع الاستخدام قابلية التعامل مع الشروط المعقدة الأداء سهولة القراءة
if تحقق شرط واحد أو متعدد عالية جيد عالية
if-else شرط مع مسارين عالية جيد عالية
if-else if سلسلة شروط متتابعة عالية متوسط إلى جيد متوسط
switch تحقق من قيمة متغير مقابل ثوابت محدودة لكن تحسنت بالتحديثات الحديثة جيد جدًا عالية (في حالات متعددة)

الخلاصة

تمثل العبارات الشرطية في لغة سي شارب حجر الأساس لأي برنامج قادر على التكيف مع الظروف المختلفة والتفاعل بذكاء مع البيانات المدخلة أو المتغيرات البيئية. بفضل تنوع بنياتها من if البسيطة إلى switch المتقدمة والتعبيرات النمطية، يستطيع المبرمج بناء منطق برمجي متطور ومرن. من الضروري فهم تفاصيل كل نوع من هذه العبارات، والاختيار الأمثل بينها، مع مراعاة الوضوح والأداء لتطوير برامج عالية الجودة.

المصادر


هذا المقال يقدم شرحًا شاملًا ومفصلًا عن العبارات الشرطية في لغة سي شارب مع الأمثلة العملية والشرح المتعمق، مما يجعله مرجعًا قيمًا للدارسين والمطورين.