किसी प्रोग्राम में विभिन्न प्रकार के डेटा के साथ काम करते समय स्विच के साथ पैटर्न मिलान के लिए एक लोकप्रिय उपयोग मामला है। वेदरस्टेशन वर्ग के निम्नलिखित उदाहरण पर विचार करें जिसमें विभिन्न प्रकार के सेंसर हैं और वर्तमान तापमान लौटाते हैं:
`पब्लिक क्लास वेदरस्टेशन {
private Sensor sensor; public double getCurrentTemperature() { return switch (sensor) { case TemperatureSensor t -> t.reading(); case HumiditySensor h -> h.reading() * 0.9; // apply a 10% moisture correction default -> 0.0; // in case of an unhandled sensor type, return 0 }; }
}
`
यहां, हम देख सकते हैं कि चयनकर्ता अभिव्यक्ति के लिए एक सेंसर इंटरफ़ेस का उपयोग किया जाता है, और केस लेबल विशिष्ट सेंसर कार्यान्वयन के आधार पर पैटर्न का उपयोग करते हैं: तापमान सेंसर और ह्यूमिडिटी सेंसर। यह स्विच स्टेटमेंट में विभिन्न प्रकार के डेटा को संभालने के अधिक संक्षिप्त और पठनीय तरीके की अनुमति देता है।
स्विच के साथ पैटर्न मिलान के लिए एक अन्य उपयोग का मामला एनम से निपटना है। पैटर्न मिलान शुरू होने से पहले, एनम का उपयोग केवल केस लेबल में स्थिरांक के रूप में किया जा सकता था, उन मानों को प्रतिबंधित किया जा सकता था जिन्हें स्विच स्टेटमेंट में परीक्षण किया जा सकता था। नई सुविधा के साथ, एनम को अब केस लेबल में योग्य बनाया जा सकता है, जिससे अधिक सटीक और लचीले मिलान की अनुमति मिलती है।
सार्वजनिक एनम दिशा {
उत्तर,
पूर्व,
दक्षिण,
पश्चिम
}
सार्वजनिक शून्य चाल(दिशा दिशा) {
स्विच (दिशा) {
मामला उत्तर, उत्तर_पश्चिम, उत्तर_पूर्व -> आगे बढ़ें();
मामला EAST,EAST_NORTH,EAST_SOUTH -> moveRight();
मामला SOUTH,SOUTH_EAST,SOUTH_WEST -> moveDown();
मामला WEST,WEST_NORTH,WEST_SOUTH -> moveLeft();
}
}
यहां, मूव() विधि निर्दिष्ट दिशा एनम मान के आधार पर विभिन्न दिशाओं में आसानी से चलने के लिए एक स्विच स्टेटमेंट का उपयोग करती है। पैटर्न मिलान के साथ, हम दिशात्मक संयोजन भी निर्दिष्ट कर सकते हैं, जैसे NORTH_WEST और EAST_SOUTH, जिससे हमारा कोड अधिक मजबूत और लचीला हो जाता है।
अंत में, आइए एक उदाहरण देखें कि पैटर्न मिलान स्विच स्टेटमेंट में त्रुटि प्रबंधन में कैसे मदद कर सकता है। पारंपरिक स्विच में, यदि चयनकर्ता अभिव्यक्ति किसी भी केस लेबल से मेल नहीं खाती है, तो त्रुटि को संभालने के लिए एक डिफ़ॉल्ट केस का उपयोग किया जा सकता है। हालाँकि, एकाधिक केस लेबल से निपटते समय यह कठिन हो सकता है और कोड दोहराव का कारण बन सकता है। पैटर्न मिलान में, यदि कोई भी केस लेबल पैटर्न चयनकर्ता अभिव्यक्ति से मेल नहीं खाता है, तो एक अपवाद फेंक दिया जाता है, जिससे त्रुटि प्रबंधन अधिक समान और कम त्रुटि-प्रवण हो जाता है।
सार्वजनिक स्ट्रिंग getPlanetaryObject(PlanetaryBody body) {
रिटर्न स्विच (बॉडी) {
केस प्लैनेट p && p.getMass() > 1e29 -> p.getName() "एक गैस विशाल है";
केस प्लैनेट p && p.getMass() > 1e23 -> p.getName() "एक चट्टानी ग्रह है";
केस स्टार s && s.getLuminosity() > 1e32 -> s.getName() "एक चमकीला तारा है";
केस स्टार s && s.getLuminosity() s.getName() "एक मंद तारा है";
डिफ़ॉल्ट -> नया मैचएक्सेप्शन फेंकें ("ग्रहीय वस्तु का प्रकार निर्धारित करने में असमर्थ:" body.getName());
};
}
इस उदाहरण में, getPlanetaryObject() विधि एक प्लैनेटरीबॉडी ऑब्जेक्ट लेती है, जो या तो एक ग्रह या एक तारा हो सकता है। केस लेबल में उपयोग किए गए पैटर्न अतिरिक्त स्थितियों पर विचार करते हैं, जैसे ग्रह का द्रव्यमान या तारे की चमक। यदि कोई भी पैटर्न मेल नहीं खाता है, तो एक मैचएक्सेप्शन फेंक दिया जाता है, जिससे त्रुटि प्रबंधन अधिक सुसंगत हो जाता है और किसी भी संभावित त्रुटि को रोका जा सकता है।
निष्कर्ष
स्विच के लिए पैटर्न मिलान हाल के दिनों में जावा में पेश की गई सबसे महत्वपूर्ण सुविधाओं में से एक है। यह अधिक लचीली और संक्षिप्त नियंत्रण-प्रवाह संरचनाओं की अनुमति देता है।
जावा एसई 21 प्रोफेशनल सर्टिफाइड डेवलपर सर्टिफिकेशन लेकर अपने जावा कौशल को अपग्रेड करें।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3