Java Academy · पाठ

Enums के साथ Switch Expressions

स्वच्छ और सभी स्थितियों को समेटने वाली branching के लिए enums के साथ आधुनिक switch expressions का उपयोग करें।

पाठ 3, कुल 4 में से13 चरण

Enums के साथ Switch Expressions, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

एनम के साथ स्विच व्यंजक

एनम के साथ स्विच व्यंजक (Java 14+) सभी मामलों को समेटने वाला, संक्षिप्त और प्रकार-आधारित मार्ग-निर्धारण प्रदान करते हैं। जब सभी एनम स्थिरांकों को शामिल कर लिया जाता है, तब default की आवश्यकता नहीं होती।

पारंपरिक स्विच कथन

पारंपरिक स्विच कथन एनम के साथ काम करता है, लेकिन अगले मामले में अनचाहे रूप से जाने से रोकने के लिए break आवश्यक है।

enum Severity { LOW, MEDIUM, HIGH, CRITICAL }

Severity s = Severity.HIGH;
String action;
switch (s) {
    case LOW:
        action = "Log and monitor";
        break;
    case MEDIUM:
        action = "Notify on-call team";
        break;
    case HIGH:
        action = "Page engineer immediately";
        break;
    case CRITICAL:
        action = "Activate incident response";
        break;
    default:
        action = "Unknown";
}
System.out.println(action); // Page engineer immediately

ऐरो लेबल वाले स्विच व्यंजक

ऐरो-लेबल वाले स्विच व्यंजक अनचाहे रूप से अगले मामले में जाने और break की आवश्यकता समाप्त करते हैं। वे एक मान का मूल्यांकन करते हैं और सभी मामलों को शामिल करना आवश्यक बनाते हैं।

enum Severity { LOW, MEDIUM, HIGH, CRITICAL }

Severity s = Severity.HIGH;
String action = switch (s) {
    case LOW      -> "Log and monitor";
    case MEDIUM   -> "Notify on-call team";
    case HIGH     -> "Page engineer immediately";
    case CRITICAL -> "Activate incident response";
    // no default needed — all cases covered
};
System.out.println(action); // Page engineer immediately

ब्लॉक वाले स्विच व्यंजक

जब किसी मामले के तर्क में कई कथन आवश्यक हों, तब परिणाम-मान देने के लिए yield के साथ एक ब्लॉक का उपयोग करें।

enum DayOfWeek { MON, TUE, WED, THU, FRI, SAT, SUN }

DayOfWeek day = DayOfWeek.FRI;
int hoursOpen = switch (day) {
    case MON, TUE, WED, THU -> 8;
    case FRI -> {
        System.out.println("Half day on Friday!");
        yield 4;  // yield returns value from block
    }
    case SAT, SUN -> 0;
};
System.out.println("Hours open: " + hoursOpen); // Hours open: 4

कई मामलों को समूहित करना

कई enum नियतांक अल्पविराम से अलग करके एक ही case साझा कर सकते हैं।

enum Season { SPRING, SUMMER, FALL, WINTER }

Season season = Season.SUMMER;
String activity = switch (season) {
    case SPRING, FALL -> "Hike in the mountains";
    case SUMMER       -> "Beach vacation";
    case WINTER       -> "Ski at the resort";
};
System.out.println(activity); // Beach vacation

switch से विधियों से लौटाना

switch अभिव्यक्तियाँ विधियों में return कथनों के रूप में बहुत अच्छी तरह काम करती हैं और आशय को स्पष्ट बनाती हैं।

enum Priority { LOW, NORMAL, HIGH, URGENT }

static int getSlaHours(Priority p) {
    return switch (p) {
        case LOW    -> 72;
        case NORMAL -> 24;
        case HIGH   -> 4;
        case URGENT -> 1;
    };
}

System.out.println(getSlaHours(Priority.URGENT)); // 1
System.out.println(getSlaHours(Priority.LOW));    // 72

स्ट्रीम में switch अभिव्यक्ति

प्रत्येक तत्व पर साफ़-सुथरे रूपांतरण करने के लिए स्ट्रीम ऑपरेशन के भीतर switch अभिव्यक्तियों का उपयोग किया जा सकता है।

import java.util.*;
import java.util.stream.*;

enum Status { PENDING, ACTIVE, CLOSED }

record Account(String id, Status status) {}

List<Account> accounts = List.of(
    new Account("A1", Status.ACTIVE),
    new Account("A2", Status.PENDING),
    new Account("A3", Status.CLOSED)
);

accounts.stream()
    .map(a -> a.id() + ": " + switch (a.status()) {
        case ACTIVE  -> "\u2705 Live";
        case PENDING -> "\u23f3 Awaiting activation";
        case CLOSED  -> "\u274c Deactivated";
    })
    .forEach(System.out::println);

संकलन-समय पर पूर्णता जाँच

कंपाइलर यह सुनिश्चित करता है कि सभी enum नियतांकों को शामिल किया गया हो। किसी enum में नया नियतांक जोड़ने पर उन सभी switch अभिव्यक्तियों में संकलन त्रुटियाँ आती हैं जो उसे संभालती नहीं हैं।

enum Color { RED, GREEN, BLUE }  // add YELLOW here → compile error below

Color c = Color.GREEN;
// This switch is exhaustive for RED, GREEN, BLUE
// If you add YELLOW to the enum without adding a case here,
// the compiler will report an error.
String hex = switch (c) {
    case RED   -> "#FF0000";
    case GREEN -> "#00FF00";
    case BLUE  -> "#0000FF";
};
System.out.println(hex); // #00FF00

सुरक्षा के लिए default वाला switch

switch कथन का उपयोग करते समय, न कि switch अभिव्यक्ति का, या जब switch जानबूझकर केवल कुछ मामलों को कवर करता हो, तब default केस जोड़ें।

enum Feature { DARK_MODE, PUSH_NOTIFICATIONS, ANALYTICS, BETA_FEATURE }

static boolean isEnabled(Feature feature) {
    return switch (feature) {
        case DARK_MODE, PUSH_NOTIFICATIONS -> true;
        case ANALYTICS                     -> false;
        default -> {
            System.out.println("Unknown feature: " + feature);
            yield false;
        }
    };
}
System.out.println(isEnabled(Feature.DARK_MODE));     // true
System.out.println(isEnabled(Feature.BETA_FEATURE));  // false

व्यावहारिक उदाहरण: ऑर्डर का जीवनचक्र

स्वीकृत रूपांतरण निर्धारित करने के लिए switch अभिव्यक्ति का उपयोग करने वाली ऑर्डर जीवनचक्र की पूर्ण स्थिति मशीन।

enum OrderState { CART, PENDING, CONFIRMED, SHIPPED, DELIVERED, CANCELLED }

static Set<OrderState> allowedTransitions(OrderState from) {
    return switch (from) {
        case CART      -> Set.of(OrderState.PENDING, OrderState.CANCELLED);
        case PENDING   -> Set.of(OrderState.CONFIRMED, OrderState.CANCELLED);
        case CONFIRMED -> Set.of(OrderState.SHIPPED);
        case SHIPPED   -> Set.of(OrderState.DELIVERED);
        case DELIVERED, CANCELLED -> Set.of(); // terminal states
    };
}
System.out.println(allowedTransitions(OrderState.PENDING));
// [CONFIRMED, CANCELLED]

String और enum पर switch

String पर switch करने के लिए null जाँच आवश्यक होती है और यह बड़े-छोटे अक्षरों के प्रति संवेदनशील होता है। enum पर switch करना null के लिए सुरक्षित है (null होने पर NPE) और प्रकार की दृष्टि से सुरक्षित भी—जब मानों का समुच्चय ज्ञात हो, तब enum को प्राथमिकता दें।

// String switch — fragile
String role = "admin";
String label = switch (role.toLowerCase()) {
    case "admin" -> "Administrator";
    case "guest" -> "Guest User";
    default      -> "Unknown";
};

// Enum switch — type-safe
enum Role { ADMIN, GUEST }
Role r = Role.ADMIN;
String label2 = switch (r) {
    case ADMIN -> "Administrator";
    case GUEST -> "Guest User";
};
System.out.println(label2); // Administrator

त्वरित जाँच

आपके पास 4 नियतांकों वाला enum है और आप सभी 4 को कवर करने वाली switch अभिव्यक्ति लिखते हैं। enum में 5वाँ नियतांक जोड़ने पर क्या होगा?

पुनरावृत्ति: enum के साथ switch अभिव्यक्तियाँ

मुख्य बातें:

  • तीर-लेबल वाली switch अभिव्यक्तियाँ break और अनपेक्षित अगले केस में जाने की आवश्यकता समाप्त करती हैं
  • ब्लॉक वाले केस से मान लौटाने के लिए yield का उपयोग करें
  • कई नियतांकों को अल्पविराम से समूहित करें: case A, B ->
  • जब सभी नियतांक कवर हों, तो पूर्ण switch अभिव्यक्तियों में default की आवश्यकता नहीं होती
  • नया enum नियतांक जोड़ने पर पूर्ण switch अभिव्यक्तियों में संकलन त्रुटियाँ आती हैं
  • स्ट्रीम की map() क्रियाओं में switch अभिव्यक्तियाँ बहुत उपयोगी होती हैं
शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “Enums के साथ Switch Expressions” पाठ निःशुल्क है?

हाँ—“Enums के साथ Switch Expressions” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Enums के साथ Switch Expressions” में मैं क्या सीखूँगा?

स्वच्छ और सभी स्थितियों को समेटने वाली branching के लिए enums के साथ आधुनिक switch expressions का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।

“Enums के साथ Switch Expressions” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Enums को परिभाषित करना और उपयोग करना
  2. Fields और Methods वाले Enums
  3. Enums के साथ Switch Expressions
  4. EnumSet और EnumMap
← Java Academy पर वापस जाएँ