تعلم كيفية البرمجة ب #C


الدرس: الهياكل الشرطية


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

عوامل المقارنة


تم إنشاء شرط باستخدام عوامل المقارنة . هناك العديد من عوامل المقارنة ، والأكثر شيوعًا هي:
عامل وصف
== مساواة
! = فرق
أكبر من
أقل من
> = أكبر من أو يساوي
<= أقل من أو يساوي
&& و المنطقية
|| أو المنطقية
! نفي
سوف نرى كيفية استخدامها في تركيبة مع العبارات الشرطية.

التعليمة "if"


تعليمات if تسمح بتنفيذ تعليمات برمجية إذا كان الشرط صحيحا (إذا = if باللغة الإنجليزية).
مثلا :

decimal compteEnBanque = 300;
if (compteEnBanque >= 0)
    Console.WriteLine("Votre compte est créditeur");الحساب فيه رصيد//
هنا لدينا متغير يحتوي على رصيد حسابنا المصرفي. إذا كان رصيدنا أكبر من أو يساوي 0 ، فسنعرض أن الحساب فيه رصيد.
لعرض أن الحساب قيد الدين ، يمكننا اختبار ما إذا كانت قيمة المتغير أقل من 0 وعرض أن الحساب مديون:

decimal compteEnBanque = 300;
if (compteEnBanque >= 0)
    Console.WriteLine("Votre compte est créditeur");// الحساب فيه رصيد
if (compteEnBanque < 0)
    Console.WriteLine("Votre compte est débiteur");//الحساب مديون  
حل آخر هو استخدام الكلمة الأساسية else، والتي تعني "خلاف ذلك" باللغة الإنجليزية.
"إذا كانت القيمة صحيحة ، فنحن نفعل شيئًا ، إن لم تكن صحيحة ، فإننا نفعل شيئًا آخر" ، مما ينتج عنه C# بواسطة:

decimal compteEnBanque = 300;
if (compteEnBanque >= 0)
    Console.WriteLine("Votre compte est créditeur");// الحساب فيه رصيد
else
    Console.WriteLine("Votre compte est débiteur");//الحساب مديون  
عليك أن تدرك أن التعليمات if تختبر إذا كانت القيمة صحيحة ( في المثال السابق ، compteEnBanque > = 0 ) .
لقد رأينا بسرعة في الفصول السابقة أن هناك نوعًا من المتغيرات يسمح بتخزين قيمة صحيحة أو خاطئة: النوع bool، أو ما يسمى boolean  (منطقي باللغة الإنجليزية) .
وبالتالي ، سيكون من الممكن أيضًا اختبار قيمة القيمة المنطقية. يمكن أيضًا كتابة المثال السابق:

decimal compteEnBanque = 300;
bool estCrediteur = (compteEnBanque >= 0);
if (estCrediteur)
    Console.WriteLine("Votre compte est créditeur");// الحساب فيه رصيد
else
    Console.WriteLine("Votre compte est débiteur");//الحساب مديون  
لاحظ أن الأقواس الموجودة حول بيان المقارنة اختيارية ، لقد كتبتها هنا لتحديد بوضوح أن المتغير "estCrediteur" سوف يحتوي على قيمة والتي هي نتيجة لعملية المقارنة "الحساب المصرفي أكبر أو يساوي 0 "، في هذه الحالة صحيح.
فيما يلي أمثلة أخرى لمساعدتك في فهم كيفية عمل نوع منطقي بشكل أكثر دقة:

int age = 30;
bool estAgeDe30Ans = age == 30;
Console.WriteLine(estAgeDe30Ans); // يعرض True
bool estSuperieurA10 = age > 10;
Console.WriteLine(estSuperieurA10); // يعرض True
bool estDifferentDe30 = age != 30;
Console.WriteLine(estDifferentDe30); // يعرض False
يمكن أن يأخذ نوع منطقي قيمتين ، صواب أو خطأ ، مكتوبة بالكلمات الأساسية true و false .

bool estVrai = true;
if (estVrai)
    Console.WriteLine("C'est vrai !");
else
    Console.WriteLine("C'est faux !"); 
من الممكن أيضًا الجمع بين الاختبارات باستخدام عوامل المنطق الشرطية ، على سبيل المثال && والتي تتوافق مع عامل التشغيل AND .
في المثال التالي ، لا نعرض رسالة الترحيب إلا إذا كان تسجيل الدخول هو "Nicolas" وكانت كلمة المرور "test" . إذا لم يتطابق أحدهما ، فسنذهب إلى التعليمة else .

string login = "Nicolas";
string motDePasse = "test";
if (login == "Nicolas" && motDePasse == "test")
    Console.WriteLine("Bienvenue Nicolas");
else
    Console.WriteLine("Login incorrect");
لاحظ هنا أننا استخدمنا اختبار المساواة "==" ، لا يجب الخلط بينه وبين عامل التعيين "=" . إنه خطأ المبتدئين الكلاسيكي.
عوامل التشغيل المنطقية الأخرى موجودة ، خاصةً المشغل || الذي يتوافق مع أو المنطقية:

if (civilite == "Mme" || civilite == "Mlle")
    Console.WriteLine("Vous êtes une femme");// أنت امرأة
else
    Console.WriteLine("Vous êtes un homme");//أنت رجل 
المثال يتحدث عن نفسه ؛ إذا كان الشخص Mme أو Mlle، فعندئذ يتعين علينا أن نقول أنها امرأة.
لاحظ هنا أنه إذا كان الشرط الأول if صحيحًا ، فلن يتم تقييم الشرط الثاني. هذه هي التفاصيل هنا ، ولكنها قد تكون مهمة في مواقف معينة ، سنرى واحدة منها في الدورة القادمة.
مشغل آخر شائع جدا هو النفي الذي نستخدمه مع المشغل « ! »  . مثلا :

bool estVrai = true;
if (!estVrai)
    Console.WriteLine("C'est faux !");//هذا خطأ
else
    Console.WriteLine("C'est vrai !");//هذا صحيح
يمكن قراءة هذا الاختبار على النحو التالي: "إذا كان نفي المتغير صحيحًا ، فسوف نكتب "خطأ" .
المتغير "isTrue" يساوي true، ونفيه يستحق false .
في هذا المثال ، سيُظهر لنا البرنامج التعليمات المقابلة else، وهي "c’est vrai !  " .
تذكر ، قلنا أن عبارة تنتهي عادة بفاصلة منقوطة. كيف يتم ذلك عندما لا يكون هناك فاصلة منقوطة في نهاية  if أو  else؟
ماذا لو كتبنا المثال السابق بهذه الطريقة؟

bool estVrai = true;
if (!estVrai) Console.WriteLine("C'est faux !");
else Console.WriteLine("C'est vrai !"); 
هذا صحيح تمامًا ويتيح لك معرفة أين تنتهي التعليمات حقًا بفضل الفاصلة المنقوطة. ومع ذلك ، نكتب هذه التعليمات عادةً بالطريقة الأولى حتى تكون أكثر قابلية للقراءة.
ستتاح لك الفرصة للالتقاء في الفصول التالية بالتعليمات الأخرى التي لا تنتهي بالضرورة بفاصلة منقوطة.
سنرى في الفصل التالي كيفية تنفيذ العديد من الإرشادات بعد التعليمات الشرطية عن طريق تجميعها في مجموعات من التعليمات البرمجية ، محددة بواسطة الأقواس المتعرجة "{" و "}" .
أخيرًا ، لاحظ أنه من الممكن إجراء سلسلة من الاختبارات لعلاج عدة حالات باستخدام المجموعة else-if . هذا يعطي:

if (civilite == "Mme")
    Console.WriteLine("Vous êtes une femme");
else if (civilite == "Mlle")
    Console.WriteLine("Vous êtes une femme non mariée");
else if (civilite == "M.")
    Console.WriteLine("Vous êtes un homme");
else
    Console.WriteLine("Je n'ai pas pu déterminer votre civilité");

تعليمات ""Switch


يمكن استخدام العبارة Switch عندما يمكن للمتغير أن يأخذ العديد من القيم. يبسط الكتابة.
وبالتالي ، فإن التعليمات التالية:

string civilite = "M.";
if (civilite == "M.")
    Console.WriteLine("Bonjour monsieur");
if (civilite == "Mme")
    Console.WriteLine("Bonjour madame");
if (civilite == "Mlle")
    Console.WriteLine("Bonjour mademoiselle");
يمكن كتابتها:

string civilite = "M.";
switch (civilite)
{
    case "M." :
        Console.WriteLine("Bonjour monsieur");
        break;
    case "Mme":
        Console.WriteLine("Bonjour madame");
        break;
    case "Mlle":
        Console.WriteLine("Bonjour mademoiselle");
        break;
}
Switch يبدأ بتقييم المتغير الذي تم تمريره إليها بين قوسين. باستخدام الكلمة الأساسية case، ندرج الحالات المختلفة الممكنة للمتغير وننفذ التعليمات المقابلة حتى الكلمة الرئيسية break مما يعني أننا نغادر switch .
يمكننا أيضًا الإشارة إلى قيمة افتراضية باستخدام الكلمة الأساسية default، لذلك في المثال التالي ، أي شيء ليس "Mr." أو "Ms." أو "Mille" سيعرض "Hello unknown" :

switch (civilite)
{
    case "M." :
        Console.WriteLine("Bonjour monsieur");
        break;
    case "Mme":
        Console.WriteLine("Bonjour madame");
        break;
    case "Mlle":
        Console.WriteLine("Bonjour mademoiselle");
        break;
    default:
        Console.WriteLine("Bonjour inconnu");
        break;
}
يمكننا أيضًا وضع سلسلة من الحالات بحيث يفعلون نفس الشيء ، مما يعيد إنتاج المشغل المنطقي OR ("||") . على سبيل المثال ، يمكننا استبدال المثال التالي:

string mois = "Janvier";
if (mois == "Mars" || mois == "Avril" ||  mois == "Mai")//الشهر 3 و 4 و 5
    Console.WriteLine("C'est le printemps");//انه الربيع
if (mois == "Juin" || mois == "Juillet" || mois == "Aout")//الأشهر 6 و و8
    Console.WriteLine("C'est l'été");//انه الصيف
if (mois == "Septembre" || mois == "Octobre" || mois == "Novembre")//الشهر 9 و 10و 11
    Console.WriteLine("C'est l'automne");//انه الخريف
if (mois == "Decembre" || mois == "Janvier" || mois == "Février")//الشهر 12 و 1 و 2
    Console.WriteLine("C'est l'hiver");//انه الشتاء
من قبل:

switch (mois)
{
    case "Mars":
    case "Avril":
    case "Mai":
        Console.WriteLine("C'est le printemps");
        break;
    case "Juin":
    case "Juillet":
    case "Aout":
        Console.WriteLine("C'est l'été");
        break;
    case "Septembre":
    case "Octobre":
    case "Novembre":
        Console.WriteLine("C'est l'automne");
        break;
    case "Décembre":
    case "Janvier":
    case "Février":
        Console.WriteLine("C'est l'hiver");
        break;
}
مما يخفف الكتابة على أي حال ويجعلها أكثر قابلية للقراءة.

في الخلاصة


  • الهياكل الشرطية تسمح بتنفيذ العبارات فقط إذا تم استيفاء شرط.
  • نستخدم عادة نتيجة المقارنة في بيان شرطي.
  • يحتوي C# على العديد من عوامل المقارنة ، مثل عامل المساواة == ، ومشغل التفوق> ، ومشغل الدونية ، إلخ.