0Pricing
Java Academy · درس

حالات متعددة التسميات

اجمعوا عدة تسميات معًا

حالات متعددة التسميات درس مجاني في Java Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Java Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Java Academy 4 دروس في المجموع.

تجميع التسميات

غالبًا ما ينبغي أن تؤدي عدة قيم إلى الإجراء نفسه. يتيح switch الحديث إدراج عدة تسميات في حالة واحدة، وفصلها بفواصل، ومشاركة فرع واحد.

التسميات المفصولة بفواصل

اكتب القيم متتابعةً وافصل بينها بفواصل قبل ->. وإذا تطابقت أي قيمة منها، فسيُنفذ الفرع.

public class Main {
    public static void main(String[] args) {
        int day = 7;
        switch (day) {
            case 1, 2, 3, 4, 5 -> System.out.println("Weekday");
            case 6, 7 -> System.out.println("Weekend");
        }
    }
}

اكتشاف حروف العلة

من الاستخدامات التقليدية لذلك: تجميع جميع حروف العلة في فرع واحد بدلًا من كتابة خمس حالات منفصلة.

public class Main {
    public static void main(String[] args) {
        char c = 'o';
        switch (c) {
            case 'a', 'e', 'i', 'o', 'u' -> System.out.println("Vowel");
            default -> System.out.println("Consonant");
        }
    }
}

التسميات المتعددة في التعبيرات

تعمل الحالات متعددة التسميات في تعبيرات switch أيضًا، إذ تعيد القيمة نفسها لأي تسمية مدرجة.

public class Main {
    public static void main(String[] args) {
        int month = 7;
        String season = switch (month) {
            case 12, 1, 2 -> "Winter";
            case 3, 4, 5 -> "Spring";
            case 6, 7, 8 -> "Summer";
            default -> "Autumn";
        };
        System.out.println(season);
    }
}

تجميع تسميات String

يمكن أيضًا تجميع قيم String. فهنا تُحوَّل عدة صيغ لأمر واحد إلى إجراء واحد.

public class Main {
    public static void main(String[] args) {
        String cmd = "quit";
        switch (cmd) {
            case "quit", "exit", "q" -> System.out.println("Closing");
            case "help", "h" -> System.out.println("Showing help");
            default -> System.out.println("Unknown command");
        }
    }
}

تجميع تسميات التعدادات

يمكن لثوابت التعداد مشاركة فرع واحد أيضًا، مما يحافظ على اختصار منطق التصنيف.

public class Main {
    enum Day { MON, TUE, WED, THU, FRI, SAT, SUN }
    public static void main(String[] args) {
        Day d = Day.SAT;
        String kind = switch (d) {
            case SAT, SUN -> "Rest";
            default -> "Work";
        };
        System.out.println(kind);
    }
}

لا توجد تسميات مكررة

لا يجوز أن تظهر كل تسمية أكثر من مرة واحدة في كامل switch. ويؤدي إدراج القيمة نفسها في فرعين إلى خطأ عند الترجمة، لأن المترجم لن يتمكن من تحديد الفرع الذي ينبغي تنفيذه.

public class Main {
    public static void main(String[] args) {
        int n = 2;
        switch (n) {
            case 1, 2 -> System.out.println("Low");
            case 3, 4 -> System.out.println("High");
            default -> System.out.println("Other");
        }
    }
}

مقارنة بالانتقال التلقائي القديم

في الصيغة القديمة ذات النقطتين، كان التجميع يتطلب تكديس حالات فارغة تنتقل تلقائيًا إلى حالة تالية فوق جسم مشترك واحد. أما صيغة الفواصل فأوضح بكثير وتتجنب الانتقال غير المقصود إلى الحالة التالية.

public class Main {
    public static void main(String[] args) {
        int code = 3;
        switch (code) {
            case 1, 3, 5, 7, 9 -> System.out.println("Odd");
            case 0, 2, 4, 6, 8 -> System.out.println("Even");
        }
    }
}

التجميع مع الكتل

يمكن للحالة المجمعة أن تستخدم جسم كتلة أيضًا. وتنفذ أي تسمية مطابقة الكتلة بأكملها.

public class Main {
    public static void main(String[] args) {
        char grade = 'B';
        switch (grade) {
            case 'A', 'B' -> {
                System.out.println("Pass");
                System.out.println("Well done");
            }
            default -> System.out.println("Try again");
        }
    }
}

الدمج مع yield

تعمل التسميات المجمعة مع yield معًا عندما يحتاج الفرع المشترك إلى إجراء حساب.

public class Main {
    public static void main(String[] args) {
        int n = 4;
        int points = switch (n) {
            case 1, 2, 3 -> 10;
            case 4, 5, 6 -> {
                int bonus = n * 2;
                yield 20 + bonus;
            }
            default -> 0;
        };
        System.out.println(points);
    }
}

تحسين قابلية القراءة

تختصر الحالات متعددة التسميات القوائم الطويلة من الفروع المتكررة في مجموعات واضحة قليلة، مما يجعل الغرض منها واضحًا بنظرة واحدة.

public class Main {
    public static void main(String[] args) {
        int http = 204;
        String group = switch (http / 100) {
            case 1, 2, 3 -> "OK-ish";
            case 4, 5 -> "Error";
            default -> "Unknown";
        };
        System.out.println(group);
    }
}

تحقق سريع

كيف تجعل عدة قيم تنفذ فرع switch نفسه في Java الحديثة؟

مراجعة

تعلمت الحالات متعددة التسميات:

  • أدرج القيم مفصولة بفواصل قبل ->
  • تعمل مع الأعداد الصحيحة والمحارف وString والتعدادات
  • لا يحدث انتقال تلقائي غير مقصود إلى الحالة التالية، بخلاف الصيغة القديمة
  • لا يجوز أن تظهر كل تسمية أكثر من مرة واحدة
  • ادمجها مع الكتل وyield عند الحاجة

الأسئلة الشائعة

هل درس «حالات متعددة التسميات» مجاني؟

نعم — نص درس «حالات متعددة التسميات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Java Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Java Academy 4 دروس في المجموع.

ماذا ستتعلم في «حالات متعددة التسميات»؟

اجمعوا عدة تسميات معًا تتمرن على Java Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Java Academy؟

لا تُشترط خبرة سابقة. Java Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.

كم من الوقت يستغرق درس «حالات متعددة التسميات»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Java Academy هذا؟

نعم. كل درس في Java Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. صيغة switch بأسلوب السهم
  2. استخدام switch كتعبير
  3. الكلمة المفتاحية yield
  4. حالات متعددة التسميات
← العودة إلى Java Academy