جاري التحميل...

switch

int choice = 2; يخزّن العدد الصحيح 2. ثم switch (choice) يقارن ذلك العدد بتسميات ثابتة. عندما يكون choice يساوي 2، يعمل case 2 وConsole.WriteLine("mid") يكتب mid. الشاشة سطر واحد. أبقِ اسم الصنف العام Pine.

قيمة واحدة، عدة تسميات ثابتة

افتح ملف Pine. اسم الصنف يبقى Pine. هذه الصفحة لا تعيد تسمية النوع. احذف bool ready إن بقي ذلك السطر، بما في ذلك if (ready)، وpass، وwait، وكل كتلة else من الصفحة السابقة. احذف bool both إن بقي ذلك السطر. احذف أي سطر ReadLine. الملف الذي تحتفظ به بلا انتظار للكتابة، بلا ready، وبلا تفرع if / else. الشاشة تُكتب فقط بسطر الكتابة تحت case المطابق أو تحت default.

داخل Main، خزّن عددًا صحيحًا قبل switch: int choice = 2;. int كلمة النوع. choice هو الاسم، ويبدأ بحرف c صغير. بلا اقتباس حول 2. الفاصلة المنقوطة تنهي سطر التخزين. ذلك السطر لا يكتب الشاشة. بعد ذلك يأتي switch نفسه:
switch (choice) {
case 1:
Console.WriteLine("low");
break;
case 2:
Console.WriteLine("mid");
break;
case 3:
Console.WriteLine("high");
break;
default:
Console.WriteLine("none");
break;
}
كلمة switch بحروف صغيرة. داخل الأقواس يجلس الاسم choice — القيمة التي يقارنها C# بكل تسمية case. كل سطر case ينتهي بنقطتين، لا بفاصلة منقوطة. تحت case 2 يجلس Console.WriteLine("mid"); ثم كلمة break وفاصلة منقوطة. عندما يحمل choice قيمة 2، يدخل C# إلى case 2، يكتب mid، يصل إلى break، ويغادر switch كله. case 3 وdefault لا يعملان في هذه الدورة. احفظ الملف.

الملف الذي تحتفظ به

أبقِ هذا الشكل التعليمي. كلمة نوع واحدة، int. اسم واحد، choice، مخزّن كـ 2. switch واحد بأقواس حول choice. الحالات 1، و2، و3، كل منها بسطر كتابة وbreak. default واحد يكتب none. لا سطر ready، ولا if، ولا كتابة عارية للرقم 2 خارج الحالات.

choice is 2

csharp
using System;

public class Pine
{
    public static void Main()
    {
        int choice = 2;
        switch (choice)
        {
            case 1:
                Console.WriteLine("low");
                break;
            case 2:
                Console.WriteLine("mid");
                break;
            case 3:
                Console.WriteLine("high");
                break;
            default:
                Console.WriteLine("none");
                break;
        }
    }
}

اقرأ من الأعلى. using System; يجهّز الأسماء القصيرة. public class Pine يسمّي النوع. public static void Main() حيث يبدأ التشغيل. int choice = 2; يخزّن 2. لا يكتب شيئًا. switch (choice) يبدأ المقارنة. case 2 يطابق، فيعمل Console.WriteLine("mid");، ثم break; يغادر switch. سطر واحد على الشاشة: mid. بلا اقتباس على الشاشة. بلا سطر ثانٍ. لا سطر bool ready في الملف الذي تحتفظ به.

شغّله بـ dotnet run. البرنامج يكتب mid. لا ينتظر أن تكتب شيئًا. العدد المخزّن وswitch كانا في الملف مسبقًا. إن انتظر dotnet run، فـ ReadLine ما زال في الملف. احذف ذلك السطر وأبقِ int choice = 2; وswitch أعلاه. البرنامج ينتهي بعد سطر الكتابة المختار. الشاشة تُظهر mid. سطر واحد. إن أظهرت الشاشة 2، فما زلت تكتب الرقم نفسه. إن أظهرت الشاشة pass أو wait، فملف if / else ما زال في مكانه. احذف تفرع ready. إن أظهرت الشاشة none، فـ choice قيمة لا تطابق أي case — ذلك الملف الثاني في هذه الصفحة، لا الملف الذي تحتفظ به. إن أظهرت الشاشة حروف switch (choice)، فسطر الكتابة فيه اقتباس حول تلك الأحرف. لا تعيد تثبيت .NET SDK من أجل شاشة تُظهر السطر الخطأ.

لماذا mid لا low أو high؟ لأن القيمة داخل الأقواس كانت 2، وcase 2 هي التسمية التي تطابق. C# لا يكتب الرقم 2 في هذا التشغيل إلا إن كتبت سطر كتابة لذلك الرقم. يكتب أي سطر كتابة يعمل تحت case المطابق. الأقواس تحفظ القيمة التي تُقارَن. كل تسمية case هنا عدد صحيح ثابت. break ينهي switch فتبقى الحالات التالية صامتة. default ينتظر قيمًا لا تطابق أي case — يبقى بلا استخدام بينما choice يساوي 2.

عندما لا يطابق أي case

غيّر القيمة المخزّنة فقط: int choice = 9;. اترك بنية switch كما هي. الآن لا يطابق أي من case 1، أو case 2، أو case 3. ينتقل C# إلى default ويشغّل Console.WriteLine("none");. يجب أن تُظهر الشاشة none، سطر واحد.

choice is 9

csharp
using System;

public class Pine
{
    public static void Main()
    {
        int choice = 9;
        switch (choice)
        {
            case 1:
                Console.WriteLine("low");
                break;
            case 2:
                Console.WriteLine("mid");
                break;
            case 3:
                Console.WriteLine("high");
                break;
            default:
                Console.WriteLine("none");
                break;
        }
    }
}

هذا الملف الثاني. ليس الملف الذي تحتفظ به. شغّل dotnet run. الشاشة تُظهر none. سطر واحد. لا تُظهر mid. لا تُظهر 9 إلا إن كتبت ذلك الرقم عمدًا. إن أظهرت الشاشة mid، فما زلت على الملف الذي تحتفظ به، حيث choice يساوي 2. بعد رؤية none، أعد الملف المحفوظ: int choice = 2; ونفس switch الذي يكتب mid على case 2. النسختان C# صالحتان. تعلّمان نفس شكل switch بحالة مطابقة وبـ default.

اقرأ تشغيل default مرة أخرى بالترتيب. choice يحمل 9. يبدأ switch (choice). case 1 لا يطابق. case 2 لا يطابق. case 3 لا يطابق. يستمر التحكم عند default. يُنفَّذ Console.WriteLine("none");. سطر واحد على الشاشة. الرقم 9 نفسه لا يظهر إلا إن كتبته عمدًا.

break يوقف الحالات التالية

break ليس زينة. بدونه، يمكن لـ C# أن يواصل تشغيل أسطر الحالة التالية بعد تطابق. ذلك الـ fall-through يفاجئ المبتدئين. هنا عرض قصير ينسى break عمدًا بعد case 2 — ليس الملف الذي تحتفظ به:

missing break after case 2

csharp
using System;

public class Pine
{
    public static void Main()
    {
        int choice = 2;
        switch (choice)
        {
            case 1:
                Console.WriteLine("low");
                break;
            case 2:
                Console.WriteLine("mid");
            case 3:
                Console.WriteLine("high");
                break;
            default:
                Console.WriteLine("none");
                break;
        }
    }
}

مع choice يساوي 2 وبلا break تحت case 2، يمكن أن تُظهر الشاشة mid في سطر وhigh في السطر التالي. طابق case 2، كتب mid، ثم سقط إلى case 3 وكتب high. الملف الذي تحتفظ به يضع break تحت كل case حتى يكتب كل مسار سطرًا واحدًا بالضبط. أعد break قبل أن تعتبر ملف Pine مرة أخرى ملف الدرس المحفوظ.

قواعد تُبقي التسميات واضحة

الأقواس حول القيمة المحوَّلة مطلوبة. كتابة switch choice { … } بلا أقواس تجعل الـ build يكتب خطأ. كل تسمية case في هذه الصفحة ثابت عدد صحيح: case 1:، وcase 2:، وcase 3:. نقطتان تتبعان التسمية. كتابة case 2; بفاصلة منقوطة بدل نقطتين ليست الشكل الذي يبنيه هذا الدرس. default بلا قيمة بعده — فقط default: ثم أسطر «لم يطابق شيء».

switch ليس نفس أداة if. if (ready) يسأل سؤال true أو false. switch (choice) يطابق قيمة واحدة بقائمة تسميات ثابتة. لا تكتب switch (ready) مع bool وتتوقع نفس شكل درس الصفحة السابقة. أبقِ عروض هذه الصفحة على int اسمه choice وتسميات case بأعداد صحيحة. مقارنات مثل if (score > 10) ما زالت لـ if عندما تحتاج نطاقًا؛ switch يتألق عندما تكون القيم منفصلة ومعروفة مسبقًا.

خلط شائع هو كتابة النحو نفسه: Console.WriteLine("switch (choice)");. ذلك يكتب الأحرف switch (choice). لا يختار case. خلط آخر هو ترك عرض if / else في نفس Main والتعجّب لماذا تُظهر الشاشة pass بدل mid. Main هذه الجلسة يجب أن يحمل الـ int وswitch فقط.

📊 choice and the screen

choice Screen
1 low
2 mid
3 high
9 none

استخدم الجدول للتحقق بعد تشغيل، لا بدلًا منه. choice يساوي 2 مع الملف الذي تحتفظ به يكتب mid. choice يساوي 9 مع الملف الثاني يكتب none. choice يساوي 1 يكتب low. choice يساوي 3 يكتب high. إن ظهر mid وhigh معًا لـ choice يساوي 2، فـ break ناقص تحت case 2 — أصلِح الـ breaks بدل إعادة تثبيت .NET SDK.

يمكنك الآن تخزين عدد صحيح، ووضعه داخل switch (…)، وإعطاء كل قيمة ثابتة case خاصًا بسطر كتابة وbreak. عندما يطابق case يعمل ذلك السطر؛ عندما لا يطابق شيء يعمل default. الصفحة التالية هي for، حيث يمكن لنفس كتلة الأسطر أن تعمل مرارًا بينما يتغيّر عدّاد.

الشاشة هي case المطابق

الملف الذي تحتفظ به يكتب mid. الاسم choice داخل الأقواس، وchoice ليس على الشاشة. الرقم 2 في سطر التخزين، و2 ليس على الشاشة. الحالات الأخرى في الملف، ولا تعمل في التشغيل المحفوظ. اقتباس حول switch (choice) يكتب حروفًا، لا case مطابقًا.

🧠 اختبر معرفتك

جاهز للبدء

اختبر معرفتك

تحدى نفسك مع هذا الاختبار التفاعلي واكتشف مدى فهمك للموضوع

❓
6
الأسئلة
🎯
70%
للنجاح
♾️
∞
الوقت
🔄
∞
المحاولات

📝 التعليمات

  • اقرأ كل سؤال بعناية
  • اختر أفضل إجابة لكل سؤال
  • يمكنك إعادة الاختبار عدة مرات كما تريد
  • سيتم عرض تقدمك في الأعلى