جُمل التحكم Control Statement - جزء 1
الجملة الشرطية if...else
كيف تتم مقارنة القيم في C# .. ؟ ماهي معاملات المقارنة المتوفرة في سي شارب ..؟؟!! وما دور معاملات المقارنة في الجملة الشرطية..؟! وكيف تتم بناء الجملة الشرطية if..else في سي شارب ..؟! وما هي معاملات المنطق في C# ..؟؟! وكيف يتم استخدام معاملات المنطق مع الجملة الشرطية فيC# ..؟؟!!
عند برمجة تطبيق، قد يكون هناك حاجة لاتخاذ قرارات مستندة إلى شروط معينة، مثل قيم المتغيرات أو الحالات المختلفة. هنا تأتي الجملة الشرطية (if...else ) للعب دورها في تحقيق ذلك. تتيح لنا الجملة الشرطية (if...else ) تحديد قسم من الكود يجب تنفيذه فقط إذا تم تحقيق شرط معين، وإلا فإنه يمكن تنفيذ قسم آخر.استكمالاً لمقالات تعليمات لغة C# نتكلم في هذا المقال عن بناء الجُملة الشرطية و طريقة عمل معاملات المقارنة والمنطق مع الجملة الشرطية (Conditional Statement - if..else)، لنبدأ…
في هذا المقال نتحدث عن:
- جملة اتخاذ القرار أو الجملة الشرطية Conditional statement.
- معاملات المقارنة Comparison Operators فيC# .
- الجملة الشرطية if و if… else فيC# .
- تعليمات if…else والـ Block {...}.
- المعاملات المنطقية Logical Operators فيC# .
جملة اتخاذ القرار أو الجملة الشرطية Conditional statement
في البرمجة، يتم تنفيذ التعليمات واحدة تلو الأخرى في تنفيذ متسلسل. وتمكننا جملة اتخاذ القرار أو الجملة الشرطية من تحديد مسار التعليمات التالية للتنفيذ. هذا يجعل التطبيقات منظمة وأكثر وضوحاً، وأسهل في الترتيب والتعديل، وكذالك من المرجح أن تكون خالية من الأخطاء.
الجملة الشرطية if...else هي مفهوم أساسي وقوي في لغة البرمجة C#. تسمح هذه الجملة بتحقيق فحص مشروط لقيمة معينة وتنفيذ بعض الكود بناءً على نتيجة الشرط. كما تتيح لنا الجملة الشرطية if...else التحكم في تدفق تنفيذ البرنامج بناءً على مجموعة متنوعة من الشروط المحددة.
إن البرامج والتطبيقات في الأساس هي خوارزميات .وحيث إن الخوارزمية هي خطوات الحل لمشكلة معينيه عن طريق تنفيذ سلسلة من الإجراءات بترتيب معين.فما هي الإجراءات المطلوب تنفيذها و ما الترتيب الذي يتم تنفيذ هذه الإجراءات به. لنأخذ مثال بسيط ثم نتوسع..
مثال: لدينا الشكل التالي و نريد تحويله الى خوارزمية :
ستكون الخوارزمية بهذا الشكل (اقرأ أكثر حول طريقة التحويل الى خوارزمية في مقال Flowchart)
If the grade is greater than or equal to 60
Display "Passed"
كما يوضح الشكل يمكن تمثيل هذه إجراءات التنفيذ للبرامج بمخطط يمثل سير عمل النظام البرمجي الذي يتكون من رموز تمثل هذه الرموز حالة الإجراءات وهي الشكل المعين والدوائر الصغيرة والأسهم. بحيث:
- تمثل الأسهم الانتقالية تسلسل ترتيب للإجراءات.
- وتمثل الدائرة البيضاء الحالة الأولية (نقطة الانطلاق ) للنشاط الاجرائي و تمثل الدائرة البيضاء المحاطة بدائرة مجوفة الحالة النهائية ( نقطة التوقف).
- و يشير رمز المعين أو القرار إلى أنه يجب اتخاذ قرار. وسيستمر سير العمل على طول المسار المحدد بواسطة شرط الحماية المرتبط به.
إن جملة اتخاذ القرار هي أحد جُمل التحكم في البرمجة حيث تحدد المسار التالي لتنفيذ البرنامج التعليمات سيتم تنفيذها وأي التعليمات سيتم تجاهلها وفي اغلب لغات ما يتم تنفيذ جملة اتخاذ القرار بالجملة الشرطية if..else .
معاملات المقارنة Comparison Operators في C#
مع الجملة الشرطية نحتاج المقارنة لإتخاذ القرار بين قيمتي ثم تحويل مسار البرنامج إلى تنفيذ تعليمات برمجية معينة وتخطي أخرى بناء على نتيجة عملية المقارنة. وتوفر سي شارب مجموعة من المعاملات للمقارنة بين القيم المختلفة تسمى معاملات المقارنة Comparison Operator، والتي يمكن تصنيفها إلى:
- معاملات المساواة Equality Operators (== ، ! =) .
- معاملات العلاقة Relational Operators (> ، < ، > = ، ، <= ).
تعليمات if و if… else في C#
تتكون الجملة الشرطية if...else من عبارة if تليها شرط محدد بين قوسين. إذا كان الشرط صحيحًا (قيمته true)، يتم تنفيذ الكود الموجودة ضمن الجملة الشرطية if. وإذا كان الشرط غير صحيح (قيمته false)، فإنه يمكن تنفيذ الكود الموجودة ضمن الجملة الشرطية else، إذا كانت موجودة.
الجملة الشرطية if هي جملة للتحقق من تعبير Expression يمكن أن يكون صحيحًا True أو خاطئًا False ويسمى هذا التعبير بالشرط. وتكون نتيجة الشرط في البرمجة بناء على نتيجة مقارنة باستخدام معاملات المقارنة Comparison Operators. ويوضح المثال التالي طريقة بناء الجملة الشرطية If بواسطة تعليمات لغة C# :
If (grade >= 60)
Console.WriteLine("Passed");
في المثال اذا كانت قيمة الـ grade اكبر من او تساوي 60 سوف تطبع كلمة "Pass"، عدا ذلك سوف يتم تجاهل جملة الطباعة.نرى أن عبارة if تبدأ دائمًا بالكلمة المحجوزة if ، متبوعة بشرط بين قوسين. ( ) يتضمنان الشرط، ف فتكون الصيغية العامة لجملة if الشرطية كتالي:
if(Condition) if the condition true ,do this instruction.
وفي سي شارب يمكن استخدام الجملة if…else لتحديد إجراء يتم تنفيذه عندما يكون الشرط صحيحًا وإجراء مختلف عندما يكون الشرط خاطئًا، لاظ /ي تسلسل الإجراءات للبرنامج في الشكل التالي:
و تمثل الخوارزمية التالية الإجراءات في الشكل اعلاه :
if grade is greater than or equal to 60
display "passed"
else
display "Failed"
فيما يلي طريقة تنفيذ جملة if… else للمثال السابق من خلال تعليمات C#
If (grade >= 60)
Console.WriteLine("Passed");
else
Console.WriteLine("Failed");
ويمكن كذلك استخدام الصيغة المختصرة للجملة الشرطية if… else والتي تكون كالتالي :
Console.WriteLine( grade >= 60 ? "Passed" : "Failed");
وتتألف الصيغة المختصرة للشرط if… else من :
- العامل الأول عبارة عن تعبير منطقي يمثل الشرط يتم تقييمه إلى صواب أو خطأ وفي المثال هو "grade >= 60 "
- العامل الثاني ما بعد علامة الاستفهام (?) وهي الجملة التي تنفذ إذا كان الشرط محقق "صحيحًا" ( جملة if) وهي المثال " Passed".
- العامل الثالث ما بعد النقطتين الرأسيتين (:) وهي الجملة التي تنفذ إذا كان الشرط غير محقق "خاطئ" (جملة else ) وهي في المثال "Failed".
باستخدام الجمل الشرطية if...else، يمكننا تحقيق تحكم دقيق في سير تنفيذ برامجنا بناءً على شروط محددة. تعد هذه الجملة أداة قوية لاتخاذ القرارات وتنظيم تدفق البرنامج في لغة C# . يمكن استخدامها في مجموعة متنوعة من السيناريوهات، مثل التحقق من صحة البيانات المدخلة، تنفيذ سلوك مختلف بناءً على حالة معينة، أو تحديد القيم الافتراضية للمتغيرات.
تعليمات if…else والـ Block {...}
في C# يقوم الـ Compiler بربط تعليمة برمجية واحد فقط مع جملة if، تلك التي تأتي مباشرة بعد شرط if لتكون هي فقط جملة الشرط. وكذلك تعليمة واحد فقط بعد else أي أنه في if…else يقوم بربط تعليمة واحدة فقط بعد if وواحد فقط بعد else ولا يكترث للتعليمات التي تتبعها سواء كانت تتبع للشرط او لا.
في هذه الحالة عندما تريد تحديد مجموعة من التعليمات البرمجية لترتبط بشرط معين نستخدم الأقواس {...} وهو مايعرف بـ Block ، فيسكون هنالك Block لتعليمات if و أخر للتعليمات else .لنلاحظ معاً ا النتائج في الأمثلة التالية:
int x = 6, y = 3;
if ( x < y)
Console.WriteLine("x > y");
Console.WriteLine("ok");
في هذا المثال لم يتم تحديد اي تعليمات ضمن block لذا سيكون الـ Output في هذه الحاله:
ok
لنرى كيف يكون الـ Output عند استخدام الـ Block
int x = 6, y = 3;
if ( x > y)
{
Console.WriteLine("x > y");
Console.WriteLine("x != y");
}
else
{
Console.WriteLine("ok");
}
x > y x != y
إن استخدام Block (الأقواس {...} ) مع جُمل التحكم مثل جملة if..else الشرطية يجعل الكود البرمجي منظم وواضح ويحد من الأخطاء المنطقية التي يظهر تأثيرها وقت التنفيذ وقد تؤدي إلى فشل البرنامج أو نتائجه أو حتى عمله دون توقف. لهذا على المبرمج التحقق من أن يكون الشرط صحيح .
لكن ماذا إذا احتجنا اختبار أكثر من شرط في جزء معين من البرامج كيف يميزها الـ Compiler وكيف نستطيع الحصول على نتائج صحيحة كما نريد. في هذه الحالة و ببساطة سيقوم الـ Compiler بربط التعليمات الخاصة بـ else مع شرط الـ if الذي يسبقها مباشرة ما لم تؤثر عليها أقواس الـ Block لنرى مثال ليتضح الأمر.
عند عدم استخدام الـ Block مع if سترتبط جملة else بشرط الـ if السابق لها مباشرة كما يتضح في المثال:
int x = 6, y = 4;
if ( x > 5)
if (y > 5)
Console.WriteLine("x and y are > 5");
else
Console.WriteLine("x is <= 5");
في المثال أعلاه سيقوم الـ Compiler أولاً بالتحقق من قيمة x أهي أكبر من 5 اذا كانت صحيحة سينتقل ليتحقق من قيمة y هل هي أكبر من 5 ثم إذا كان هذا الشرط صحيح سينفذ جملة if ماعدا ذلك سينفذ جملة else.
int x = 6, y = 4;
if ( x > 5)
{
if (y > 5)
Console.WriteLine("x and y are > 5");
}
else
Console.WriteLine("x is <= 5");
ولكن عند وضع الأقواس {...}سيقوم الـ Compiler بالتحقق من الشرط الأول فقط (هل x أكبر من 5) وإذا لم يتحقق سيذهب مباشرة إلى جملة else مباشرة.
المعاملات المنطقية Logical Operators في C#
تكلمنا في مقال سابق بعنوان أساسيات البرمجة عن المعاملات المنطقية. في سي شارب تقوم معاملات المنطق Logical Operators بالربط بين التعبيرات المنطقية وتعطي نتائج بناء على المعاملات المنطقية المستخدمة في مع التعبيرات البرمجة . فيمكن للمعاملات المنطقية الربط بين القيم المنطقية أو نتائج المقارنة لمعاملات المقارنة ، ويمكن لمعاملات المنطق الربط بين أكثر من تعبيرين من تعبيرات المقارنة.
ويمكن استخدام معاملات المنطق Logical Operators إضافة إلى معاملات المقارنة مع الجملة الشرطية If في حال أردنا اختبار أكثر من شرط في وقت واحد لإرجاع قيمة منطقية واحدة.
و معاملات المنطق Logical Operators ثلاث معاملات هي AND, OR, NOT وتستخدم في عمليات التحقق وترجع قيمة من اثنتين صحيحة True أو خاطئة False ، ولكل من هذه المعاملات طريقة عمل معية وهي :
AND
تقارن And بين قمتين منطقتين أو أكثر وترجع قيمة صحيحة True فقط في حال كانت كل العمليات ترجع قيمة True أي كلها صحيحة ، عدا ذلك سترجع خطأ False .وفي C# يرمز للـ And بـ && ويوضح الشكل التالي حالات النتائج للـ And متى تكون صائبة او خاطئة.
طريقة كتابة And مع الجملة الشرطية If في C#
...........
if ( gender == "F" && age >= 65)
//Or can write
if (( gender == "F") && (age >= 65))
...........
OR
وتقارن Or بين قمتين منطقتين أو أكثر وترجع خطأ False في حالة واحدة وهي إن كانت كل العمليات ترجع قيمة False خاطئة عدا ذلك ترجع Or قيمة صحيحة True . وفي C# يرمز للـ OR بـ || ويوضح الشكل التالي نتائج Or:
طريقة كتابة Or مع الجملة الشرطية if في C#
if ( gender == "F" || age >= 65)
//Or can write
if (( gender == "F") || (age >= 65))
NOT
وتكتب في بعض اللغات بـ Not وفي C# يرمز لها بالرمز ! وتقوم Not بعكس القيمة المنطقية إن كانت القيمة المنطقية صحيحة True سترجع False وبالعكس. كما هو ظاهر في الشكل التالي :
طريقة كتابة Not مع الجملة الشرطية if في C#
if !( gender == "F")
ملاحظة :جدول الـ Truth Table للمعاملات المنطقية Logical Operators هو ذاته لكل لغات البرمجة والمأخوذ من الجبر الرياضيات.
يعتبر فهم الجملة الشرطية if...else واستخدام المعاملات في لغة C# أمرًا أساسيًا للمطورين. يساعدان في كتابة برامج أكثر مرونة وتفاعلية وفعالية. سواء كنت مبتدئًا في لغة C# أو لديك خبرة سابقة، فإن فهم هذه المفاهيم سيمكنك من الاستفادة الكاملة من إمكانيات اللغة وتحقيق النتائج المرجوة في تطوير برامجك.