switch
تصف ويكيبيديا جملة switch بأنها "نوع من آليات التحكم في الاختيار تُستخدم للسماح لقيمة متغير أو تعبير بتغيير مسار تنفيذ البرنامج".
تتضمن هذه الآلية الكلمات المفتاحية التالية: switch وcase وbreak وdefault.
في أبسط صورها، تختبر جملة switch تعبيرًا أوليًا أو تعبيرًا نصيًا وتتخذ قرارًا بناءً على قيمته. على سبيل المثال:
string direction = GetDirection();
switch (direction)
{
case "left":
GoLeft();
break;
case "right":
GoRight();
break;
default:
MarkTime();
break;
}
وفي أكثر صورها تطورًا، تُدخل التحويل النازل case <Type> <variable>: والحمايات (when).
Animal animal = GetAnimal();
switch (animal)
{
case Dog canine:
case Coyote canine:
canine.Bark();
break;
case Cat cat when cat.HasOnly8Lives():
cat.IsCareful();
cat.Meow();
break;
case Cat cat:
cat.Meow();
break;
}
أنت تطوّر نظامًا لمساعدة العاملين في موقع نادٍ لكرة القدم على إعداد تقارير عن المباريات. يستطيع هذا النظام تحليل جوانب مختلفة من المباراة، داخل الملعب وخارجه، ويحوّلها إلى تدفّق من الأحداث.
لا يلعب الفريق إلا بخطة 4-3-3، ولم يوافق قط على تغيير القواعد عام 1965 الذي سمح بالتبديلات، فضلًا عن توسيع قوائم اللاعبين.
أوصاف اللاعبين كما يلي:
1 -> "goalie"
2 -> "left back"
3 & 4 -> "center back"
5 -> "right back"
6, 7 & 8 -> "midfielder"
9 -> "left wing"
10 -> "striker"
11 -> "right wing"
نفّذ الطريقة الثابتة PlayAnalyzer.AnalyzeOnField() لإرجاع وصف اللاعب بناءً على رقم قميصه.
PlayAnalyzer.AnalyzeOnField(10);
// => "striker"
عدّل الطريقة PlayAnalyzer.AnalyzeOnField() لتُرجع UNKNOWN عند معالجة رقم قميص خارج النطاق 1-11.
نفّذ الطريقة PlayAnalyzer.AnalyzeOffField() لإرجاع أوصاف للأنشطة والشخصيات المحيطة بأرض الملعب.
تتلقى هذه الطريقة أنواعًا مختلفة من البيانات التي ينبغي تحليلها وتحويلها إلى نصٍّ مناسب لمساعدة الصحفيين.
لنبدأ بالبيانات المتعلقة بالاستاد:
int)string)لا ينبغي معالجة أنواع البيانات غير المعروفة، لذا إذا تلقت الطريقة بيانات من نوع مختلف فيجب إرجاع سلسلة نصية فارغة.
PlayAnalyzer.AnalyzeOffField(5000);
// => "There are 5000 supporters at the match."
PlayAnalyzer.AnalyzeOffField("5 minutes to go!");
// => "5 minutes to go!"
PlayAnalyzer.AnalyzeOffField(0.5);
// => ""
عدّل الطريقة PlayAnalyzer.AnalyzeOffField() لإرجاع أوصاف الحوادث التي تقع أثناء المباراة.
يمكن أن تكون الحوادث أي صنف فرعي من النوع Incident، وستحتوي على وصف للحادث.
الإصابات نوع خاص من الحوادث لأنها تؤدي إلى إيقاف المباراة مؤقتًا، لذا ينبغي التعامل معها على نحو مختلف.
PlayAnalyzer.AnalyzeOffField(new Foul());
// => "The referee deemed a foul."
PlayAnalyzer.AnalyzeOffField(new Injury(8));
// => "Oh no! Player 8 is injured. Medics are on the field."
عدّل الطريقة PlayAnalyzer.AnalyzeOffField() لتذكر مديري النادي الحاضرين أثناء المباراة.
المديرون نسخ من النوع Manager ولديهم اسم واسم النادي الذي يديرونه.
قد يكون نادي المدير غير معروف، وفي هذه الحالة سيُضبط على null.
إذا لم يكن نادي المدير معروفًا، فلا ينبغي أن يكون جزءًا من الوصف.
PlayAnalyzer.AnalyzeOffField(new Manager("José Mário dos Santos Mourinho Félix", null));
// => "José Mário dos Santos Mourinho Félix"
PlayAnalyzer.AnalyzeOffField(new Manager("Jürgen Klopp", "Liverpool"));
// => "Jürgen Klopp (Liverpool)"
سجّل في Exercism لتتعلّم وتتقن C# عبر 62 مفهومًا178 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.