تمرين - إنشاء منطق قرار باستخدام عبارات if
- 19 دقائق
تتضمن معظم التطبيقات عددا كبيرا من مسارات التنفيذ. على سبيل المثال، يمكن للتطبيق تنفيذ مسارات تنفيذ مختلفة استنادا إلى خيار القائمة الذي يحدده المستخدم. يشير المطورون إلى التعليمات البرمجية التي تنفذ مسارات تنفيذ مختلفة كفروع التعليمات البرمجية.
عبارة تفريع التعليمات البرمجية الأكثر استخداما هي العبارة if .
if تعتمد العبارة على تعبير منطقي محاط بمجموعة من الأقواس. إذا كان التعبير صحيحاً، فسيتم تنفيذ التعليمة البرمجية بعد العبارة if. إذا لم يكن الأمر كذلك، يتجاهل وقت تشغيل .NET التعليمات البرمجية ولا ينفذها.
في هذا التمرين، ستتدرب على كتابة if عبارات من خلال إنشاء لعبة. أولا عليك تحديد قواعد اللعبة، ثم عليك تنفيذها في التعليمات البرمجية.
ستستخدم الأسلوب لمحاكاة Random.Next() المتداول ثلاثة نرد سدسة الجوانب. ستقوم بتقييم القيم المحتسبة لحساب النتيجة. إذا كانت النتيجة أكبر من الإجمالي العشوائي، فستعرض رسالة رابحة للمستخدم. إذا كانت النتيجة أقل من القطع، فستعرض رسالة خاسرة للمستخدم.
- إذا كان ناتج إلقائك لأي حجري نرد هو نفس القيمة، فستحصل على نقطتين مكافأة لحصولك على زوج مماثل.
- إذا كان ناتج إلقائك لثلاثة أحجار نرد هو نفس القيمة، فستحصل على ست نقاط مكافأة لحصولك على ثلاثة مماثلين.
- إذا كان مجموع إلقاء أحجار النرد الثلاثة، بالإضافة إلى أي نقاط مكافأة، هو 15 أو أكثر، فستفوز في المباراة. وإذا لم يكن، فستخسر.
ستقوم بتحسين القواعد أثناء معرفة المزيد حول العبارة if .
هام
يستخدم هذا التمرين على نطاق واسع الفئة System.Random . يمكنك الرجوع إلى الوحدة النمطية Microsoft Learn بعنوان "أساليب الاستدعاء من مكتبة فئات .NET باستخدام C#" إذا كنت بحاجة إلى تحديث كيفية Random.Next() العمل.
إعداد بيئة الترميز الخاصة بك
تتضمن هذه الوحدة أنشطة ترشدك خلال عملية إنشاء نموذج التعليمات البرمجية وتشغيله. يتم تشجيعك على إكمال هذه الأنشطة باستخدام Visual Studio Code كبيئة تطوير. سيساعدك استخدام Visual Studio Code لهذه الأنشطة على أن تصبح أكثر راحة في كتابة التعليمات البرمجية وتشغيلها في بيئة مطور يستخدمها المحترفون في جميع أنحاء العالم.
فتح Visual Studio Code.
يمكنك استخدام القائمة Windows (أو مورد مكافئ لنظام تشغيل آخر) لفتح Visual Studio Code.
في قائمة Visual Studio Code File ، حدد Open Folder.
في مربع الحوار فتح مجلد ، انتقل إلى مجلد سطح مكتب Windows.
إذا كان لديك موقع مجلد مختلف حيث تحتفظ بمشاريع التعليمات البرمجية، يمكنك استخدام موقع المجلد هذا بدلا من ذلك. لهذا التدريب، الشيء المهم هو أن يكون لديك موقع يسهل تحديد موقعه وتذكره.
في مربع الحوار فتح مجلد ، حدد تحديد مجلد.
إذا رأيت مربع حوار أمان يسألك عما إذا كنت تثق بالمؤلفين، فحدد نعم.
في قائمة Visual Studio Code Terminal ، حدد New Terminal.
لاحظ أن موجه الأوامر في لوحة Terminal يعرض مسار المجلد للمجلد الحالي. على سبيل المثال:
C:\Users\someuser\Desktop>إشعار
إذا كنت تعمل على جهاز الكمبيوتر الخاص بك بدلا من بيئة الاختبار المعزولة أو البيئة المستضافة وأكملت وحدات Microsoft Learn الأخرى في سلسلة C# هذه، فربما تكون قد أنشأت بالفعل مجلد مشروع لعينات التعليمات البرمجية. إذا كان الأمر كذلك، يمكنك تخطي الخطوة التالية، والتي تستخدم لإنشاء تطبيق وحدة تحكم في مجلد TestProject.
في موجه الأوامر Terminal، لإنشاء تطبيق وحدة تحكم جديد في مجلد محدد، أدخل المطالبة التالية:
dotnet new console -o ./CsharpProjects/TestProjectيستخدم أمر .NET CLI هذا قالب برنامج .NET لإنشاء مشروع تطبيق وحدة تحكم C# جديد في موقع المجلد المحدد. ينشئ الأمر مجلدات CsharpProjects وTestProject نيابة عنك، ويستخدم TestProject كاسم لملفك
.csproj.إذا تم عرض رسالة تخبرك بأن الملفات موجودة بالفعل، فتابع الخطوات التالية. ستقوم بإعادة استخدام ملفات المشروع الموجودة.
في طريقة عرض EXPLORER، قم بتوسيع المجلد CsharpProjects .
يجب أن تشاهد مجلد TestProject وملفين، ملف برنامج C# المسمى Program.cs وملف مشروع C# يسمى TestProject.csproj.
في قائمة Visual Studio Code File ، حدد Open Folder.
في مربع الحوار فتح مجلد ، حدد المجلد CsharpProjects ، ثم حدد تحديد مجلد.
في طريقة عرض EXPLORER، قم بتوسيع المجلد TestProject، ثم حدد Program.cs.
حذف أسطر التعليمات البرمجية الموجودة.
ستستخدم مشروع وحدة تحكم C# هذا لإنشاء نماذج التعليمات البرمجية وبنائها وتشغيلها أثناء هذه الوحدة النمطية.
أغلق لوحة Terminal.
كتابة التعليمات البرمجية التي تنشئ ثلاثة أرقام عشوائية وتعرضها في الإخراج
تأكد من وجود ملف Program.cs فارغ مفتوح في Visual Studio Code.
لإنشاء التعليمات البرمجية الأولية لهذا التمرين، أدخل ما يلي:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}");خذ دقيقة لمراجعة التعليمات البرمجية التي أدخلتها.
للبدء، يمكنك إنشاء مثيل جديد للفئة
System.Randomوتخزين مرجع إلى الكائن في متغير يسمىdice. بعد ذلك، يمكنك استدعاءRandom.Next()الأسلوب علىdiceالكائن ثلاث مرات، مع توفير كل من الحدود السفلية والأعلى لتقييد القيم المحتملة بين1و6(الحد العلوي خاص). يمكنك حفظ الأرقام العشوائية الثلاثة في المتغيراتroll1وroll2و علىroll3التوالي.بعد ذلك، يمكنك جمع لفات النرد الثلاثة وحفظ القيمة في متغير عدد صحيح يسمى
total.وأخيرا، يمكنك استخدام
WriteLine()الأسلوب لعرض القيم الثلاث باستخدام استنتاج السلسلة.عند تشغيلك للتعليمات البرمجية، يجب أن تشاهد الرسالة التالية (ستكون الأرقام مختلفة).
Dice roll: 4 + 5 + 2 = 11كانت هذه المهمة الأولى مهمة إعداد. الآن، يمكنك إضافة منطق القرار إلى التعليمات البرمجية الخاصة بك لجعل اللعبة أكثر إثارة للاهتمام.
إضافة عبارة if لعرض رسائل مختلفة استنادا إلى قيمة المتغير الإجمالي
في محرر التعليمات البرمجية Visual Studio، حدد موقع المؤشر في أسفل ملف التعليمات البرمجية، ثم قم بإنشاء سطر تعليمة برمجية فارغ.
لإنشاء ميزة لعبتك الأولى، أدخل العبارات التالية
if.if (total > 14) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }يتم استخدام هذين البيانين
ifللتعامل مع السيناريوهات الفائزة والخسارة. خذ دقيقة لفحص العبارة الأولىif.لاحظ أن العبارة
ifتتكون من ثلاثة أجزاء:- الكلمة الأساسية
if -
تعبير منطقي بين أقواس
() -
كتلة تعليمات برمجية معرفة بواسطة أقواس متعرجة
{ }
في وقت التشغيل، يتم تقييم التعبير
total > 14المنطقي. إذا كانت هذه عبارة حقيقية (إذا كانت قيمةtotalأكبر من14) فسيستمر تدفق التنفيذ في التعليمات البرمجية المعرفة في كتلة التعليمات البرمجية. بمعنى آخر، سيتم تنفيذ التعليمات البرمجية في الأقواس المتعرجة.ومع ذلك، إذا كان التعبير المنطقي خطأ (قيمة
totalليست أكبر من14) فسيتخطى تدفق التنفيذ كتلة التعليمات البرمجية. بمعنى آخر، فإنه لن يتم تنفيذ التعليمات البرمجية في الأقواس المتعرجة.وأخيرا، تتحكم العبارة الثانية
ifفي الرسالة إذا فقد المستخدم. في الوحدة التالية، ستستخدم تباينا على العبارةifلتقصير هاتين العبارتين في عبارة واحدة تعبر بوضوح أكبر عن الهدف.- الكلمة الأساسية
ما التعبير المنطقي؟
التعبير المنطقي هو أي تعليمات برمجية يقوم بإرجاع قيمة منطقية، إما true أو false. أبسط التعبيرات المنطقية هي ببساطة القيم true و false. بدلا من ذلك، يمكن أن يكون التعبير المنطقي نتيجة أسلوب يرجع القيمة true أو false. على سبيل المثال، فيما يلي مثال بسيط للتعليمات البرمجية string.Contains() باستخدام الأسلوب لتقييم ما إذا كانت سلسلة واحدة تحتوي على سلسلة أخرى.
string message = "The quick brown fox jumps over the lazy dog.";
bool result = message.Contains("dog");
Console.WriteLine(result);
if (message.Contains("fox"))
{
Console.WriteLine("What does the fox say?");
}
نظراً لأن message.Contains("fox") تعرض قيمة true أو false، فإنها مؤهلة كتعبير منطقي ويمكن استخدامها في عبارة if.
يمكن إنشاء تعبيرات منطقية بسيطة أخرى باستخدام عوامل تشغيل لمقارنة قيمتين. ويشمل المشغلون:
-
==، عامل التشغيل "يساوي"، لاختبار المساواة -
>، عامل التشغيل "أكبر من"، لاختبار أن القيمة الموجودة على اليسار أكبر من القيمة الموجودة على اليمين -
<، عامل التشغيل "أقل من"، لاختبار أن القيمة على اليسار أقل من القيمة الموجودة على اليمين -
>=، عامل التشغيل "أكبر من أو يساوي" -
<=، عامل التشغيل "أقل من أو يساوي" - وما إلى ذلك…
إشعار
تكرس سلسلة التدريب C# على Microsoft Learn وحدة نمطية كاملة للتعبيرات المنطقية. هناك العديد من عوامل التشغيل التي يمكنك استخدامها لإنشاء تعبير منطقي، وستغطي فقط بعض الأساسيات هنا في هذه الوحدة النمطية. لمزيد من المعلومات حول التعبيرات المنطقية، راجع الوحدة النمطية Microsoft Learn بعنوان "تقييم التعبيرات المنطقية لاتخاذ القرارات في C#".
في هذا المثال، قمت بتقييم التعبير total > 14المنطقي . ومع ذلك، كان بإمكانك اختيار التعبير total >= 15 المنطقي لأنه في هذه الحالة، يكونان متشابهين. نظرا لأن قواعد اللعبة تحدد "إذا كان مجموع النرد الثلاثة، بالإضافة إلى أي مكافآت، هو 15 أو أكثر، فإنك تفوز باللعبة"، فمن المحتمل أن تقوم بتنفيذ >= 15 التعبير. ستقوم بإجراء هذا التغيير في الخطوة التالية من التمرين.
ما هي كتلة التعليمات البرمجية؟
كتلة التعليمات البرمجية هي مجموعة من سطر واحد أو أكثر من التعليمات البرمجية التي يتم تعريفها بواسطة رمز { }قوس متعرج فتح وإغلاق . وهو يمثل وحدة كاملة من التعليمات البرمجية التي لها غرض واحد في نظام البرامج الخاص بك. وفي هذه الحالة، في وقت التشغيل، يتم تنفيذ كافة أسطر التعليمات البرمجية في كتلة التعليمات البرمجية إذا كان التعبير المنطقي صحيحًا. على العكس من ذلك، إذا كان التعبير المنطقي خاطئاً، فسيتم تجاهل جميع أسطر التعليمة البرمجية في كتلة التعليمة البرمجية.
يجب أن تعرف أيضا أن كتل التعليمات البرمجية يمكن أن تحتوي على كتل تعليمات برمجية أخرى. في الواقع، من الشائع أن تكون كتلة التعليمات البرمجية "متداخلة" داخل كتلة تعليمات برمجية أخرى في تطبيقاتك. ستبدأ في تداخل كتل التعليمات البرمجية الخاصة بك لاحقا في هذه الوحدة النمطية عند إنشاء عبارة واحدة if داخل كتلة التعليمات البرمجية لأخرى.
إشعار
تكرس سلسلة التدريب C# على Microsoft Learn وحدة نمطية بأكملها لفهم كتل التعليمات البرمجية. تعتبر كتل التعليمة البرمجية أساسية لفهم تنظيم وهيكل التعليمة البرمجية، وهي تحدد حدود نطاق المتغير. لمزيد من المعلومات حول كتل التعليمات البرمجية، راجع الوحدة النمطية بعنوان "التحكم في نطاق المتغير والمنطق باستخدام كتل التعليمات البرمجية في C#".
إضافة عبارة if أخرى لتنفيذ مكافأة doubles
بعد ذلك، يمكنك تنفيذ القاعدة: "إذا كان أي نردين تقوم بتدحرجهما ينتج عنهما نفس القيمة، فستحصل على نقطتي مكافأة لتدحرج مزدوج". قم بتعديل التعليمات البرمجية من الخطوة السابقة لمطابقة سرد التعليمات البرمجية التالي:
في محرر Visual Studio Code، حدد موقع المؤشر على سطر التعليمات البرمجية الفارغ أعلى العبارة الأولى
if.لإنشاء ميزة اللعبة "doubles"، أدخل العبارة التالية
if.if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; }هنا يمكنك دمج ثلاثة تعبيرات منطقية لإنشاء تعبير منطقي مركب واحد في سطر واحد من التعليمات البرمجية. ويسمى هذا أحيانا حالة مركبة. لديك مجموعة خارجية واحدة من الأقواس التي تجمع بين ثلاث مجموعات داخلية من الأقواس مفصولة بحرفين من الأنابيب.
الأشرطة العمودية المزدوجة
||هي مشغل OR المنطقي، والتي تقول في الأساس "إما أن يكون التعبير على اليسار أو التعبير على اليمين صحيحاً حتى يكون التعبير المنطقي بأكمله صحيحاً". إذا كان كلا التعبيرين المنطقيين خطأ، فإن التعبير المنطقي بأكمله غير صحيح. يمكنك استخدام عاملي تشغيل OR منطقيين بحيث يمكنك توسيع التقييم إلى تعبير منطقي ثالث.أولا، يمكنك تقييم
(roll1 == roll2). إذا كان هذا صحيحًا، فإن التعبير بأكمله صحيح. إذا كان خطأ، يمكنك تقييم(roll2 == roll3). إذا كان هذا صحيحًا، فإن التعبير بأكمله صحيح. إذا كان خطأ، يمكنك تقييم(roll1 == roll3). إذا كان هذا صحيحًا، فإن التعبير بأكمله صحيح. إذا كان هذا خطأ، فإن التعبير بأكمله غير صحيح.إذا كان التعبير المنطقي المركب صحيحا، فنفذ كتلة التعليمات البرمجية التالية. هذه المرة، هناك سطران من التعليمات البرمجية. يقوم السطر الأول من التعليمات البرمجية بطباعة رسالة للمستخدم. السطر الثاني من التعليمات البرمجية زيادة قيمة بواسطة
total2.لتحسين قابلية قراءة التعليمات البرمجية الخاصة بك، قم بتحديث العبارة الثانية
ifكما يلي:if (total >= 15)لاحظ أنك تستخدم
>=الآن عامل التشغيل في التعبير المستخدم لتقييم لفة الفوز.>=عامل التشغيل يعني "أكبر أو يساوي". ونتيجة لذلك، يمكنك المقارنةtotalبقيمة15بدلا من14. مع هذه التغييرات، فإن التعبير الذي تستخدمه لتقييم لفة فائزة الآن يشبه التعبير الذي تقيمه للفة خاسرة. من المفترض أن يساعد هذا في تسهيل فهم التعليمات البرمجية (أكثر قابلية للقراءة). نظرا لأنك تتعامل مع قيم عدد صحيح، سيعمل التعبير(total >= 15)الجديد بشكل مماثل لما كتبته سابقا(total > 14).خذ دقيقة لمراجعة التعليمات البرمجية الخاصة بك.
يجب أن تتطابق التعليمة البرمجية مع ما يلي:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }لاحظ المحاذاة المحسنة بين التعبيرات المستخدمة لتقييم القوائم الفائزة والخسارة.
إضافة عبارة if أخرى لتنفيذ مكافأة الثلاثي
بعد ذلك، يمكنك تنفيذ القاعدة: "إذا كانت جميع النرد الثلاثة التي تقوم بتدحرجها تؤدي إلى نفس القيمة، فستحصل على ست نقاط مكافأة للثلاثي المتداول". تعديل التعليمات البرمجية من الخطوات السابقة لمطابقة قائمة التعليمات البرمجية التالية:
في محرر التعليمات البرمجية Visual Studio، قم بإنشاء سطر تعليمة برمجية فارغ أسفل كتلة التعليمات البرمجية لبيان "doubles".
ifلإنشاء ميزة اللعبة "الثلاثية"، أدخل العبارة التالية
if.if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; }هنا يمكنك دمج تعبيرين منطقيين لإنشاء تعبير منطقي مركب واحد في سطر واحد من التعليمات البرمجية. لديك مجموعة خارجية واحدة من الأقواس التي تجمع بين مجموعتين داخليتين من الأقواس مفصولة بحرفين من العطف.
علامات العطف المزدوجة
&&هي مشغل AND المنطقي، الذي يقول في الأساس "فقط إذا كان كلا التعبيرين صحيحين، فإن التعبير بأكمله يكون صحيحاً". في هذه الحالة، إذا كانroll1يساويroll2، وroll2يساويroll3، ثم عن طريق الخصم،roll1يجب أن يكون مساويا لroll3، و قام المستخدم بالتدحرج ثلاث مرات.في قائمة Visual Studio Code File ، انقر فوق Save.
خذ دقيقة لمراجعة التعليمات البرمجية الخاصة بك.
تأكد من أن التعليمات البرمجية الخاصة بك تطابق ما يلي:
Random dice = new Random(); int roll1 = dice.Next(1, 7); int roll2 = dice.Next(1, 7); int roll3 = dice.Next(1, 7); int total = roll1 + roll2 + roll3; Console.WriteLine($"Dice roll: {roll1} + {roll2} + {roll3} = {total}"); if ((roll1 == roll2) || (roll2 == roll3) || (roll1 == roll3)) { Console.WriteLine("You rolled doubles! +2 bonus to total!"); total += 2; } if ((roll1 == roll2) && (roll2 == roll3)) { Console.WriteLine("You rolled triples! +6 bonus to total!"); total += 6; } if (total >= 15) { Console.WriteLine("You win!"); } if (total < 15) { Console.WriteLine("Sorry, you lose."); }في طريقة عرض EXPLORER، لفتح Terminal في موقع مجلد TestProject، انقر بزر الماوس الأيمن فوق TestProject، ثم حدد Open in Integrated Terminal.
يجب فتح لوحة Terminal، ويجب أن تتضمن موجه أوامر يظهر أن Terminal مفتوحة لموقع مجلد TestProject.
في موجه الأوامر Terminal، لتشغيل التعليمات البرمجية، اكتب dotnet run ثم اضغط على Enter.
إشعار
إذا رأيت رسالة تقول "تعذر العثور على مشروع لتشغيله"، فتأكد من أن موجه الأوامر Terminal يعرض موقع مجلد TestProject المتوقع. على سبيل المثال:
C:\Users\someuser\Desktop\csharpprojects\TestProject>يجب أن تشاهد الإخراج الذي يشبه إحدى النتائج التالية:
Dice roll: 3 + 6 + 1 = 10 Sorry, you lose."أو"، كهذا:
Dice roll: 1 + 4 + 4 = 9 You rolled doubles! +2 bonus to total! Sorry, you lose."أو"، كهذا:
Dice roll: 5 + 6 + 4 = 15 You win!"أو"، إذا كنت محظوظًا، فسترى هذا:
Dice roll: 6 + 6 + 6 = 18 You rolled doubles! +2 bonus to total! You rolled triples! +6 bonus to total! You win!ولكن انتظر، هل يجب أن تكافئ اللاعب بكل من المكافأة الثلاثية والمكافأة المزدوجة؟ بعد كل شيء ، لفة من الثلاثي يعني أنها أيضا تدحرجت مزدوجة. من الناحية المثالية، لا ينبغي أن تتكدس المكافآت. يجب أن يكون هناك شرطان منفصلان للمكافأة. هذا خطأ في المنطق يجب تصحيحه.
المشاكل في المنطق والفرص لتحسين التعليمات البرمجية
على الرغم من أن هذه بداية جيدة، وتعلمت الكثير عن if العبارة، والتعبيرات المنطقية، وكتل التعليمات البرمجية، وعوامل التشغيل المنطقية OR و AND، وما إلى ذلك، هناك الكثير الذي يمكن تحسينه. وستقوم بذلك في الوحدة التالية.
خلاصة
- استخدم عبارة
ifلتفريعي منطق التعليمات البرمجية.ifستقوم عبارة القرار بتنفيذ التعليمات البرمجية في كتلة التعليمات البرمجية الخاصة بها إذا كان التعبير المنطقي الخاص بها يساوي true. وإلا، سيقوم وقت التشغيل بتخطي كتلة التعليمات البرمجية والمتابعة للسطر التالي من التعليمات البرمجية بعد كتلة التعليمات البرمجية. - التعبير المنطقي هو أي تعبير يُرجع قيمة منطقية.
- سيقوم مشغلو المنطقية بمقارنة القيمتين جهة اليسار واليمين للمساواة، والمقارنة، وأكثر من ذلك.
- يتم تعريف كتلة التعليمات البرمجية بواسطة أقواس متعرجة
{ }. وتجمع أسطر من التعليمات البرمجية التي يجب أن تعامل كوحدة واحدة. - يجمع عامل التشغيل
&&المنطقي AND تعبيرين بحيث يجب أن يكون التعبيران الفرعيان صحيحين لكي يكون التعبير بأكمله صحيحا. - يجمع عامل التشغيل
||المنطقي OR تعبيرين بحيث إذا كان التعبير الفرعي صحيحا، يكون التعبير بأكمله صحيحا.