CodeGym /Java Blog /यादृच्छिक /जावा स्विच स्टेटमेंट
John Squirrels
पातळी 41
San Francisco

जावा स्विच स्टेटमेंट

यादृच्छिक या ग्रुपमध्ये प्रकाशित केले

जावा स्विच बद्दल थोडा सिद्धांत

अशी कल्पना करा की तुम्ही रस्त्याच्या फाट्यावर थांबलेले शूरवीर आहात. जर तुम्ही डावीकडे गेलात तर तुमचा घोडा गमवाल. जर तुम्ही बरोबर गेलात तर तुम्हाला ज्ञान मिळेल. आम्ही कोडमध्ये ही परिस्थिती कशी दर्शवू? तुम्हाला कदाचित आधीच माहित असेल की हे निर्णय घेण्यासाठी आम्ही जर-तर आणि जर-तर-अन्य रचना वापरतो.

if (turn_left) { 
    System.out.println("You will lose your horse"); 
}
if (turn_right) {
    System.out.println("You will gain knowledge");
}
else 
    System.out.println("So you're just going to stand there?");

पण रस्ता दोन नाही तर दहा भागात विभागला तर? तुमच्याकडे असे रस्ते आहेत जे "पूर्णपणे उजवीकडे", "त्याच्या थोडेसे डावीकडे", "डावीकडे थोडेसे अधिक" आणि असेच एकूण 10 संभाव्य रस्ते आहेत? या आवृत्तीमध्ये तुमचा "जर-तर-अन्यतर " कोड कसा वाढेल याची कल्पना करा!

if (option1)
{…}
else if (option2)
{…}
…
else if (optionN) ...
समजा तुमच्याकडे रस्त्यात 10-वे काटा आहे (येथे पर्यायांची संख्या मर्यादित आहे हे महत्त्वाचे आहे). अशा परिस्थितींसाठी, Java मध्ये स्विच स्टेटमेंट आहे.

       switch (ExpressionForMakingAChoice) {
           case (Value1):
               Code1;
               break;
           case (Value2):
               Code2;
               break;
...
           case (ValueN):
               CodeN;
               break;
           default:
               CodeForDefaultChoice;
               break;
       }

हे विधान कसे कार्य करते:
  • ExpressionForMakingAChoice चे मूल्यमापन केले जाते. नंतर स्विच स्टेटमेंट परिणामी मूल्याची पुढील ValueX शी तुलना करते (ज्या क्रमाने ते सूचीबद्ध आहेत).
  • ExpressionForMakingAChoice ValueX शी जुळत असल्यास, कोलन खालील कोड कार्यान्वित केला जातो.
  • ब्रेक स्टेटमेंट आढळल्यास , स्विच स्टेटमेंटच्या बाहेर नियंत्रण हस्तांतरित केले जाते.
  • ExpressionForMakingAChoice कोणत्याही ValueX शी जुळत नसल्यास, नियंत्रण CodeForDefaultCase कडे जाते.
महत्वाचे मुद्दे
  • स्विच स्टेटमेंटमध्ये, ExpressionForMakingAChoice चा प्रकार खालीलपैकी एक असणे आवश्यक आहे:

    • बाइट , शॉर्ट , चार , इंट .
    • बाइट , शॉर्ट , कॅरेक्टर , इंटीजर (आदिम डेटाटाइपचे आवरण).
    • स्ट्रिंग .
    • एनम .
  • डीफॉल्ट ब्लॉक पर्यायी आहे . जर ते अनुपस्थित असेल आणि ExpressionForMakingAChoice कोणत्याही ValueX शी जुळत नसेल, तर कोणतीही कारवाई केली जाणार नाही.
  • ब्रेक स्टेटमेंट आवश्यक नाही . तो अनुपस्थित असल्यास, ब्रेकच्या पहिल्या घटनेपर्यंत किंवा स्विच स्टेटमेंटच्या समाप्तीपर्यंत कोड कार्यान्वित केला जाईल (केस स्टेटमेंटमधील पुढील तुलनांकडे दुर्लक्ष करून) .
  • समान कोड अनेक पर्यायांसाठी कार्यान्वित करणे आवश्यक असल्यास, आम्ही अनेक सलग केस स्टेटमेंट निर्दिष्ट करून डुप्लिकेशन दूर करू शकतो.

आता स्विच स्टेटमेंट Java मध्ये कसे वापरले जाते ते पाहू

तुम्ही काळजी करू नका: आम्ही सिद्धांत पूर्ण केले. आपण खालील उदाहरणे पाहिल्यानंतर, सर्वकाही अधिक स्पष्ट होईल. बरं, चला सुरुवात करूया. आपल्या सूर्यमालेतील ग्रहांचा समावेश असलेले खगोलशास्त्रातील उदाहरण पाहू. नवीनतम आंतरराष्ट्रीय दृष्टिकोनानुसार, आम्ही प्लूटोला (त्याच्या कक्षाच्या गुणधर्मांमुळे) वगळले आहे. आम्हाला आठवते की आमचे ग्रह त्यांच्या सूर्यापासूनच्या अंतराने खालीलप्रमाणे व्यवस्था केलेले आहेत: बुध, शुक्र, पृथ्वी, मंगळ, गुरू, शनि, युरेनस आणि नेपच्यून. चला जावा पद्धत लिहू जी ग्रहाची क्रमिक संख्या (सूर्यापासूनच्या अंतराच्या सापेक्ष) घेते आणि ग्रहाच्या वातावरणातील मुख्य घटक सूची म्हणून परत करते .. तुम्हाला आठवत असेल की काही ग्रहांची वातावरणाची रचना सारखीच असते. अशा प्रकारे, शुक्र आणि मंगळावर प्रामुख्याने कार्बन डायऑक्साइड असतो; गुरू आणि शनीच्या वातावरणात हायड्रोजन आणि हीलियम असते; आणि युरेनस आणि नेपच्यून वायूंच्या शेवटच्या जोडीमध्ये मिथेन जोडतात. येथे आमचे कार्य आहे:

public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
    List<String> result = new ArrayList<>();
    switch (seqNumberFromSun) {
        case 1: result.add("No atmosphere");
            break;
        case 2:
        case 4: result.add("Carbon dioxide");
            break;
        case 3: result.add("Carbon dioxide");
            result.add("Nitrogen");
            result.add ("Oxygen");
            break;
        case 5:
        case 6: result.add("Hydrogen");
            result.add("Helium");
            break;
        case 7:
        case 8: result.add("Methane");
            result.add("Hydrogen");
            result.add("Helium");
            break;
        default:
            break;
    }
    return result;
}
लक्षात घ्या की आम्ही समान वातावरणातील रचना असलेल्या ग्रहांसाठी समान कोड वापरत आहोत. आम्ही सलग केस स्टेटमेंट वापरून हे केले . जर आपल्याला आपल्या गृह ग्रहाच्या वातावरणाची रचना मिळवायची असेल, तर आपण आपल्या पद्धतीला 3 युक्तिवाद म्हणून कॉल करू:

getPlanetAtmosphere(3).
System.out.println(getPlanetAtmosphere(3)) returns ["Carbon dioxide", "Nitrogen", "Oxygen"].
ब्रेकसह प्रयोग: आम्ही सर्व ब्रेक स्टेटमेंट काढून टाकल्यास काय होईल? चला एक प्रयत्न करूया:

    public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
        List<String> result = new ArrayList<>();
        switch (seqNumberFromSun) {
            case 1: result.add("No atmosphere");
            case 2:
            case 4: result.add("Carbon dioxide");
            case 3: result.add("Carbon dioxide");
                result.add("Nitrogen");
                result.add ("Oxygen");
            case 5:
            case 6: result.add("Hydrogen");
                result.add("Helium");
            case 7:
            case 8: result.add("Methane");
                result.add("Hydrogen");
                result.add("Helium");
            default:
        }
        return result;
    }
जर आपण System.out.println(getPlanetAtmosphere(3)) चा परिणाम मुद्रित केला , तर आपल्याला आढळून येईल की आपला गृह ग्रह इतका राहण्यायोग्य नाही. किंवा आहे? स्वतःसाठी न्याय करा: ["कार्बन डायऑक्साइड", "नायट्रोजन", "ऑक्सिजन", "हायड्रोजन", "हेलियम", "मिथेन", "हायड्रोजन", "हेलियम"] . असे का घडले? प्रोग्राम पहिल्या सामन्यानंतर स्विच ब्लॉकच्या समाप्तीपर्यंत सर्व केस स्टेटमेंट्स कार्यान्वित करतो .

ब्रेक स्टेटमेंटचे अत्यधिक ऑप्टिमायझेशन

लक्षात घ्या की आम्ही ब्रेक स्टेटमेंट आणि केसेस वेगळ्या पद्धतीने मांडून पद्धत सुधारू शकतो .

public static List<String> getPlanetAtmosphere(int seqNumberFromSun) {
    List<String> result = new ArrayList<>();
    switch (seqNumberFromSun) {
        case 1: result.add("No atmosphere");
                break;
        case 3: result.add("Nitrogen");
                result.add ("Oxygen");
        case 2:
        case 4: result.add("Carbon dioxide");
                break;
        case 7:
        case 8: result.add("Methane");
        case 5:
        case 6: result.add("Hydrogen");
                result.add("Helium");
    }
     return result;
}
कमी कोड दिसते, बरोबर? केस स्टेटमेंट्सच्या क्रमाने खेळून आणि त्यांचे पुनर्गठन करून आम्ही विधानांची एकूण संख्या कमी केली आहे. आता प्रत्येक प्रकारचा गॅस कोडच्या फक्त एका ओळीत सूचीमध्ये जोडला जातो. शेवटच्या उदाहरणात दिलेला कोड फक्त गोष्टी कशा काम करतात हे दाखवण्यासाठी आहे. आम्ही अशा प्रकारे कोड लिहिण्याची शिफारस करत नाही. जर अशा जावा कोडच्या लेखकाने (इतर प्रोग्रामरला सोडा) तो राखला पाहिजे, तर त्याला किंवा तिला त्या केस ब्लॉक्सच्या निर्मितीमागील तर्क आणि स्विच स्टेटमेंटमध्ये अंमलात आणलेल्या कोडची पुनर्रचना करणे खूप कठीण जाईल .

जर पासून फरक

if आणि switch स्टेटमेंटमधील बाह्य समानता लक्षात घेता , हे विसरू नका की स्विच स्टेटमेंट विशिष्ट मूल्यावर आधारित केसेसपैकी एक निवडते, तर if स्टेटमेंटमध्ये कोणतीही बुलियन अभिव्यक्ती असू शकते. तुमचा कोड डिझाइन करताना हे लक्षात ठेवा.

निष्कर्ष

  • इफ स्टेटमेंटसह तुमचा कोड अव्यवस्थित होऊ नये म्हणून केस स्टेटमेंट दोनपेक्षा जास्त शाखांसाठी वापरा .
  • ब्रेक स्टेटमेंट टाकून प्रत्येक विशिष्ट मूल्यासाठी (केस स्टेटमेंट) शाखेचा तार्किक ब्लॉक पूर्ण करण्यास विसरू नका .
  • स्विच स्टेटमेंटची अभिव्यक्ती एनम किंवा स्ट्रिंग तसेच काही आदिम प्रकार असू शकते.
  • डीफॉल्ट ब्लॉक लक्षात ठेवा . अनपेक्षित मूल्ये हाताळण्यासाठी ते वापरा.
  • कार्यप्रदर्शन ऑप्टिमाइझ करण्यासाठी, सर्वात सामान्य मूल्यांशी संबंधित कोड शाखा स्विच ब्लॉकच्या सुरूवातीस हलवा .
  • केस स्टेटमेंट्सच्या शेवटी ब्रेक स्टेटमेंट हटवून तुमच्या "ऑप्टिमायझेशन" मध्ये वाहून जाऊ नका - असा कोड समजणे कठीण आहे, आणि परिणामी, राखणे कठीण आहे.
टिप्पण्या
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION