العبارات الشرطية في لغة سي شارب C#
تُعتبر العبارات الشرطية من أهم أدوات التحكم في تدفق البرامج داخل لغات البرمجة بشكل عام، ولغة سي شارب C# بشكل خاص، حيث تتيح للمبرمجين اتخاذ قرارات منطقية بناءً على تحقق شروط معينة. هذه العبارات تُستخدم لتنفيذ كتل من الأكواد أو تخطيها حسب تحقق شرط أو عدة شروط. وتُعد العبارات الشرطية من الركائز الأساسية التي تسمح بإنشاء برامج ذكية ومتجاوبة مع المدخلات أو الظروف المختلفة.
مفهوم العبارات الشرطية
العبارة الشرطية هي تركيب برمجي يسمح بتنفيذ جزء معين من الكود فقط إذا تحقق شرط منطقي (Boolean condition) معين. الشرط يُعبّر عنه عادةً بتعبير منطقي يُرجع قيمة صحيحة (true) أو خاطئة (false). بناءً على قيمة هذا الشرط، يتم تنفيذ الكود داخل الكتلة الشرطية أو يتم تخطيه.
في لغة سي شارب، تعتمد العبارات الشرطية بشكل كبير على جملة if، وكذلك على التفرعات المرتبطة بها مثل else و else if. إلى جانب ذلك، توفر اللغة عبارات شرطية متقدمة مثل switch التي تسهل التعامل مع حالات متعددة.
أنواع العبارات الشرطية في سي شارب
1. جملة if (إذا)
جملة if هي أبسط أشكال العبارات الشرطية، حيث يتم التحقق من شرط معين وإذا تحقق هذا الشرط يتم تنفيذ الكود الموضوع ضمن القوسين {}. إذا كان الشرط خاطئًا، يتم تخطي تنفيذ الكود داخلها.
الصيغة العامة:
csharpif (condition)
{
// كود يتم تنفيذه إذا تحقق الشرط
}
مثال عملي:
csharpint number = 10;
if (number > 5)
{
Console.WriteLine("الرقم أكبر من 5");
}
في المثال أعلاه، الشرط هو number > 5، وإذا كان صحيحًا يتم طباعة الرسالة.
2. جملة if-else (إذا-إلا)
تُستخدم جملة if-else لتحديد مسارين مختلفين لتنفيذ الكود، إما إذا تحقق الشرط أو إذا لم يتحقق. عند تحقق الشرط يتم تنفيذ كتلة الـ if، وإذا لم يتحقق يتم تنفيذ كتلة الـ else.
الصيغة العامة:
csharpif (condition)
{
// تنفيذ إذا تحقق الشرط
}
else
{
// تنفيذ إذا لم يتحقق الشرط
}
مثال عملي:
csharpint number = 3;
if (number % 2 == 0)
{
Console.WriteLine("الرقم زوجي");
}
else
{
Console.WriteLine("الرقم فردي");
}
في هذا المثال يتم التحقق مما إذا كان الرقم زوجيًا أو فرديًا وطباعة النتيجة المناسبة.
3. جملة if-else if-else (سلسلة الشروط)
تُستخدم هذه البنية لتقييم عدة شروط متتالية، حيث يتم تنفيذ الكود الخاص بأول شرط يتحقق وتُتجاهل باقي الشروط.
الصيغة العامة:
csharpif (condition1)
{
// تنفيذ إذا تحقق الشرط 1
}
else if (condition2)
{
// تنفيذ إذا تحقق الشرط 2
}
else
{
// تنفيذ إذا لم يتحقق أي شرط سابق
}
مثال عملي:
csharpint 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. يُستخدم هذا النوع عندما يكون لديك متغير واحد وتريد التحقق من قيمته ضمن مجموعة محددة.
الصيغة العامة:
csharpswitch (expression)
{
case value1:
// تنفيذ عند تطابق value1
break;
case value2:
// تنفيذ عند تطابق value2
break;
default:
// تنفيذ إذا لم تتطابق أي حالة
break;
}
مثال عملي:
csharpchar 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)، لعكس قيمة الشرط.
مثال:
csharpint age = 20;
bool hasPermission = true;
if (age >= 18 && hasPermission)
{
Console.WriteLine("مسموح بالدخول");
}
else
{
Console.WriteLine("غير مسموح بالدخول");
}
هنا يجب تحقق الشرطين معًا للسماح بالدخول.
العبارات الشرطية المختصرة (التعبيرات الثلاثية)
توفر لغة سي شارب تعبيرًا شرطيًا مختصرًا يعرف بالتعبير الثلاثي (Ternary Operator) والذي يمكن استخدامه كبديل مختصر لـ if-else عند الرغبة في تعيين قيمة بناءً على شرط.
الصيغة:
csharpvariable = condition ? valueIfTrue : valueIfFalse;
مثال عملي:
csharpint 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) للتحكم في تنفيذ أجزاء معينة من الكود حسب شرط معين أثناء كل دورة.
مثال:
csharpfor (int i = 1; i <= 10; i++)
{
if (i % 2 == 0)
{
Console.WriteLine(i + " رقم زوجي");
}
}
في هذا المثال، تتم طباعة الأعداد الزوجية فقط بين 1 و 10.
2. العبارات الشرطية مع التعامل مع الاستثناءات
يمكن دمج العبارات الشرطية مع آلية معالجة الاستثناءات (try-catch) لضمان التعامل مع الحالات الاستثنائية بشكل مرن.
مثال:
csharptry
{
int number = int.Parse(Console.ReadLine());
if (number < 0)
{
Console.WriteLine("الرقم يجب أن يكون غير سالب");
}
}
catch (FormatException)
{
Console.WriteLine("المدخل غير صالح");
}
3. التفرعات المعقدة باستخدام التعبيرات النمطية
في الإصدارات الحديثة من سي شارب (مثل C# 7.0 وما بعدها)، يمكن استخدام تعبيرات نمطية مع جملة switch لتسهيل التحقق من الأنواع والقيم المختلفة ضمن نفس البنية.
مثال:
csharpobject 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 المتقدمة والتعبيرات النمطية، يستطيع المبرمج بناء منطق برمجي متطور ومرن. من الضروري فهم تفاصيل كل نوع من هذه العبارات، والاختيار الأمثل بينها، مع مراعاة الوضوح والأداء لتطوير برامج عالية الجودة.
المصادر
-
وثائق Microsoft الرسمية للغة سي شارب:
https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/selection-statements -
كتاب “C# Programming Guide” من مايكروسوفت
https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/
هذا المقال يقدم شرحًا شاملًا ومفصلًا عن العبارات الشرطية في لغة سي شارب مع الأمثلة العملية والشرح المتعمق، مما يجعله مرجعًا قيمًا للدارسين والمطورين.

