JShell Java 9 का REPL टूल है जो नियंत्रण प्रवाह स्टेटमेंट्स जैसे switch का त्वरित परीक्षण करने की अनुमति देता है। Java 12+ ने स्विच एक्सप्रेशंस (तीर सिंटैक्स) पेश किए, लेकिन पारंपरिक स्विच स्टेटमेंट JShell में काम करता है।
पारंपरिक स्विच स्टेटमेंट (Java 9+)
ब्रेक के बिना (फॉल-थ्रू)
jshell> int i = 10
i ==> 10
jshell> switch(i) {
...> case 1: System.out.println("1");
...> case 10: System.out.println("10");
...> default: System.out.println("default");
...> }
10
default
// नोट: फॉल-थ्रू - दोनों case 10 और default निष्पादित हुए!
ब्रेक के साथ (कोई फॉल-थ्रू नहीं)
jshell> int i = 1
i ==> 1
jshell> switch(i) {
...> case 1: System.out.println("1"); break;
...> case 10: System.out.println("10"); break;
...> default: System.out.println("default"); break;
...> }
1
// केवल मिलान वाला केस निष्पादित होता है
एकाधिक केस लेबल्स
jshell> String day = "MON"
day ==> "MON"
jshell> switch(day) {
...> case "MON": case "TUE": case "WED":
...> case "THU": case "FRI": System.out.println("कार्यदिवस"); break;
...> case "SAT": case "SUN": System.out.println("सप्ताहांत"); break;
...> default: System.out.println("अमान्य दिन");
...> }
कार्यदिवस
Java 12+ स्विच एक्सप्रेशंस (JShell में भी काम करता है)
तीर सिंटैक्स (कोई फॉल-थ्रू नहीं, मान लौटाता है)
jshell> int dayNum = 3
dayNum ==> 3
jshell> String dayType = switch(dayNum) {
...> case 1, 2, 3, 4, 5 -> "कार्यदिवस";
...> case 6, 7 -> "सप्ताहांत";
...> default -> "अमान्य";
...> };
dayType ==> "कार्यदिवस"
कॉलन सिंटैक्स के साथ yield (Java 13+)
jshell> int value = switch(dayNum) {
...> case 1, 2, 3, 4, 5: yield "कार्यदिवस";
...> case 6, 7: yield "सप्ताहांत";
...> default: yield "अमान्य";
...> };
value ==> "कार्यदिवस"
JShell-विशिष्ट व्यवहार
बहु-लाइन इनपुट
jshell> switch(2) {
...> case 1: System.out.println("एक");
...> case 2: System.out.println("दो");
...> default: System.out.println("अन्य");
...> }
दो
अन्य
पिछले परिणाम चर ($) का उपयोग
jshell> 2 + 3
$1 ==> 5
jshell> switch($1) {
...> case 5: System.out.println("पांच"); break;
...> default: System.out.println("अन्य");
...> }
पांच
एनम के साथ स्विच
jshell> enum Color { RED, GREEN, BLUE }
| created enum Color
jshell> Color c = Color.GREEN
c ==> GREEN
jshell> switch(c) {
...> case RED: System.out.println("लाल"); break;
...> case GREEN: System.out.println("हरा"); break;
...> case BLUE: System.out.println("नीला"); break;
...> }
हरा
स्विच स्टेटमेंट नियम
| नियम | विवरण |
| केस मान | कंपाइल-टाइम स्थिरांक होने चाहिए |
| प्रकार | byte, short, char, int, String, Enum, Character, Byte, Short, Integer |
| डुप्लिकेट केस | अनुमत नहीं |
| डिफ़ॉल्ट | वैकल्पिक, कहीं भी रख सकते हैं |
| फॉल-थ्रू | डिफ़ॉल्ट व्यवहार (ब्रेक के बिना) |
| स्कोप | केस ब्लॉक स्कोप साझा करते हैं (ब्लॉक के लिए {} का उपयोग करें) |
स्कोप उदाहरण
jshell> switch(1) {
...> case 1:
...> int x = 10; // पूरे स्विच ब्लॉक के लिए स्कोप!
...> System.out.println(x);
...> case 2:
...> // x यहां दृश्यमान है लेकिन अनारंभिक!
...> System.out.println(x); // त्रुटि यदि केस 2 निष्पादित होता है
...> }
// सही: ब्लॉक स्कोप के लिए ब्रेसेस का उपयोग करें
jshell> switch(1) {
...> case 1: {
...> int x = 10;
...> System.out.println(x);
...> break;
...> }
...> case 2: {
...> int x = 20; // अलग स्कोप
...> System.out.println(x);
...> break;
...> }
...> }
सर्वोत्तम अभ्यास
- लगभग हमेशा break का उपयोग करें जब तक कि फॉल-थ्रू इरादतन न हो
- स्कोप अलगाव के लिए ब्लॉक {} का उपयोग करें केस में चर घोषित करते समय
- डिफ़ॉल्ट केस शामिल करें अप्रत्याशित मानों को संभालने के लिए
- Java 12+ के लिए स्विच एक्सप्रेशंस पर विचार करें - सुरक्षित, अभिव्यंजक
Enum के साथ स्विच का उपयोग करें प्रकार सुरक्षा के लिए
तुलना: स्टेटमेंट बनाम एक्सप्रेशन
| पहलू | स्विच स्टेटमेंट | स्विच एक्सप्रेशन (Java 12+) |
| सिंटैक्स | case X: ... break; | case X -> ... या case X: yield ... |
| मान लौटाता है | नहीं | हां |
| फॉल-थ्रू | डिफ़ॉल्ट | नहीं (तीर) / स्पष्ट (yield) |
| स्कोप | साझा | प्रति-केस पृथक |
| थकाऊ | नहीं | हां (सभी केस कवर होने चाहिए) |