एनम और पैटर्न मिलान को समझना रस्ट में मौलिक है। उन दोनों को लागू करने के लिए प्रभावी तकनीकों का अन्वेषण करें।

बुनियादी डेटा प्रकारों जैसे स्ट्रिंग्स, पूर्णांक और फ्लोटिंग से संचालन करने के लिए जंग विभिन्न डेटा प्रकार प्रदान करता है कंपाउंड डेटा टाइप जैसे वेक्टर और एरे से कंपोज़िट डेटा टाइप जैसे स्ट्रक्चर और एन्यूमरेशन के लिए पॉइंट नंबर।

Enums (गणना) एक डेटा प्रकार है जो मूल्यों के एक निश्चित सेट के प्रतिनिधित्व की अनुमति देता है, जैसे सप्ताह के दिन और इंद्रधनुष का रंग। जब किसी चर के लिए संभावित मान सीमित और ज्ञात हों, तो Enums आसान होते हैं।

जंग में Enums को परिभाषित करना

रस्ट में एनम घोषित करना समान है सी # में एनम घोषित करना. आप उपयोग करेंगे एनुम नाम के बाद कीवर्ड और गणना को परिभाषित करने के लिए घुंघराले ब्रेसिज़ का एक सेट। आप विभाजक के रूप में अल्पविराम के साथ कर्ली ब्रेसिज़ के भीतर संभावित वेरिएंट (निकाय) को परिभाषित कर सकते हैं।

यहाँ सप्ताह के दिनों के लिए एक गणना है:

एनुमकाम करने के दिन {
सोमवार,
मंगलवार,
बुधवार,
गुरुवार,
शुक्रवार,
शनिवार,
रविवार,
}

काम करने के दिन एनम सप्ताह के दिनों का प्रतिनिधित्व करता है।

instagram viewer
वेरिएंट दिन के नाम हैं और इनका कोई संबद्ध मान नहीं है। साथ ही, आपके एनम के वेरिएंट कोई भी हो सकते हैं जंग डेटा प्रकार.

आप एनम पर पथ विभाजक (::) ऑपरेटर का उपयोग करके वेरिएंट नाम निर्दिष्ट करके वेरिएंट तक पहुंच सकते हैं।

होने देना दिन = कार्यदिवस:: सोमवार;

// `दिन` चर का सांख्यिकीय रूप से टाइप किया गया संस्करण
होने देना दिन: सप्ताह का दिन = सप्ताह का दिन:: सोमवार;

कोड निर्दिष्ट करता है कि आप तक पहुंचना चाहते हैं सोमवार कार्यदिवस एनम का संस्करण।

Enums के वेरिएंट और डिस्क्रिमिनेंट्स

एक एनम के वेरिएंट पूर्णांक मानों से जुड़े होते हैं जिन्हें कहा जाता है विभेदक. डिफ़ॉल्ट रूप से, विभेदक मान शून्य से शुरू होते हैं और बाद के वेरिएंट के लिए 1 से बढ़ जाते हैं; हालाँकि, प्रत्येक संस्करण के लिए कस्टम विभेदक मान निर्दिष्ट करना संभव है।

यहां वैल्यू-असाइन किए गए वेरिएंट के साथ वीकडे एनम का उदाहरण दिया गया है।

एनुमकाम करने के दिन {
सोमवार = 1,
मंगलवार = 2,
बुधवार = 3,
गुरुवार = 4,
शुक्रवार = 5,
शनिवार = 6,
रविवार = 7,
}

द वीकडे एनम में सप्ताह के प्रत्येक दिन का प्रतिनिधित्व करने वाले सात वेरिएंट होते हैं, और प्रत्येक दिन का एक मान होता है (जिसे विवेचक कहा जाता है)। वेरिएंट सप्ताह के पहले से आखिरी दिन के क्रम में हैं।

आप वैरिएंट नाम का उपयोग करके विवेचक मान तक पहुँच सकते हैं।

fnमुख्य() {
प्रिंटल!("सोमवार: {}", कार्यदिवस:: सोमवार जैसाi32);
प्रिंटल!("मंगलवार: {}", कार्यदिवस:: मंगलवार जैसाi32);
प्रिंटल!("बुधवार: {}", कार्यदिवस:: बुधवार जैसाi32);
प्रिंटल!("गुरुवार: {}", कार्यदिवस:: गुरुवार जैसाi32);
प्रिंटल!("शुक्रवार: {}", कार्यदिवस:: शुक्रवार जैसाi32);
प्रिंटल!("शनिवार: {}", कार्यदिवस:: शनिवार जैसाi32);
प्रिंटल!("रविवार: {}", कार्यदिवस:: रविवार जैसाi32);
}

प्रिंटल! मैक्रो का उपयोग डिस्क्रिमिनेंट्स को प्रिंट करने के लिए किया जाता है। प्रत्येक प्रिंटल! मैक्रो मंगलाचरण में दो तर्क होते हैं: एक प्रारूप स्ट्रिंग और एक मान। प्रारूप स्ट्रिंग निर्दिष्ट करती है कि आउटपुट को कैसे प्रारूपित किया जाए; मूल्य वास्तविक मूल्य है जो मुद्रित हो जाता है।

इस मामले में, प्रारूप स्ट्रिंग एक स्ट्रिंग शाब्दिक है जिसमें कार्यदिवस का नाम होता है, और मान एक स्पष्ट कास्ट के साथ एनम संस्करण है i32 पूर्णांक प्रकार।

I32 के लिए स्पष्ट कास्ट आवश्यक है क्योंकि रस्ट एनम को पूर्णांक के रूप में दर्शाया जाता है, लेकिन विशिष्ट पूर्णांक प्रकार एनम के आकार पर निर्भर करता है। डिफ़ॉल्ट रूप से, रस्ट सबसे छोटा पूर्णांक प्रकार प्रदान करता है जो कि एनम में सभी विभेदकों का प्रतिनिधित्व कर सकता है। लेकिन इस मामले में, आप मानों को i32 पूर्णांक के रूप में प्रिंट करना चाहते हैं, इसलिए आपको उन्हें स्पष्ट रूप से डालने की आवश्यकता है।

यहाँ चलाने से परिणाम है मुख्य समारोह:

जंग में पैटर्न का मिलान

पैटर्न मिलान एक जंग नियंत्रण संरचना है जो डेटा पैटर्न की पहचान करने के लिए उपयोगी है। पैटर्न मिलान संचालन के दौरान संक्षिप्त और कुशल कोड लिखने में सक्षम बनाता है उन्नत डेटा संरचनाएं या जटिल ऑपरेशन करना।

आप उपयोग करेंगे मिलान कीवर्ड द्वारा पीछा किया => पैटर्न के लिए विभाजक और क्रमशः पैटर्न के लिए संचालन। पैटर्न कोई भी रस्ट एक्सप्रेशन हो सकता है, जिसमें शाब्दिक, चर और फ़ंक्शन कॉल शामिल हैं।

यहाँ एक उदाहरण मिलान विवरण दिया गया है:

fnमुख्य(){
होने देना एक्स = 5;
मिलान एक्स {
1 => प्रिंटल!("एक"),
2 => प्रिंटल!("दो"),
3 => प्रिंटल!("तीन"),

// चलाता है अगर कोई भी पैटर्न मेल नहीं खाता है
_ => प्रिंटल!("कुछ और"),
}
}

मुख्य समारोह मेल खाता है एक्स कई पैटर्न के विरुद्ध और फिर x के मान के आधार पर मान प्रिंट करता है। अंडरस्कोर (_) पैटर्न एक वाइल्ड कार्ड पैटर्न है जिसका उपयोग उन मामलों के लिए कैच-ऑल के रूप में किया जाता है जिन्हें स्पष्ट रूप से हैंडल नहीं किया जाता है।

Enums और पैटर्न मिलान

एक प्रकार-सुरक्षित और कुशल तरीके से उन्नत डेटा संरचनाओं को व्यक्त करने और काम करने के लिए Enums और पैटर्न मिलान उपयोगी होते हैं। आप उन मूल्यों के साथ काम करने के लिए मूल्यों और पैटर्न मिलान के एक निश्चित सेट को परिभाषित करने के लिए एनम का उपयोग कर सकते हैं।

यहाँ एक इंद्रधनुष में रंगों के लिए एक एनम है:

एनुमइंद्रधनुष {
लाल,
नारंगी,
पीला,
हरा,
नीला,
इंडिगो,
बैंगनी,
}

का प्रत्येक संस्करण इंद्रधनुष एनम इंद्रधनुष के एक रंग का प्रतिनिधित्व करता है। इंद्रधनुष के रंग के आधार पर कार्यक्रम के प्रवाह को नियंत्रित करने के लिए आप मैच स्टेटमेंट के साथ पैटर्न मिलान का उपयोग वेरिएंट के खिलाफ पैटर्न से मिलान करने के लिए कर सकते हैं।

यहां एक फ़ंक्शन है जो रेनबो एनम से रंग संस्करण लेता है और रंग के आधार पर एक संदेश प्रिंट करता है।

fnprint_color(रंग: इंद्रधनुष) {
मिलान रंग {
इंद्रधनुष:: लाल => प्रिंटल!("रंग लाल है!"),
इंद्रधनुष:: नारंगी => प्रिंटल!("रंग नारंगी है!"),
इंद्रधनुष:: पीला => प्रिंटल!("रंग पीला है!"),
इंद्रधनुष:: हरा => प्रिंटल!("रंग हरा है!"),
इंद्रधनुष:: नीला => प्रिंटल!("रंग नीला है!"),
इंद्रधनुष:: नील => प्रिंटल!("रंग इंडिगो है!"),
इंद्रधनुष:: बैंगनी => प्रिंटल!("रंग बैंगनी है!"),
}
}

fnमुख्य() {
होने देना रंग = इंद्रधनुष:: नीला;
प्रिंट_कलर (रंग);
}

आपको मिल सकता है वेरिएंट कभी नहीं बनाए जाते हैं या इसी तरह की चेतावनियां जब आप उपरोक्त कोड को निष्पादित करने का प्रयास करेंगे क्योंकि ब्लू वेरिएंट के अलावा अन्य वेरिएंट इस कोड में कभी नहीं बनाए गए थे। इस प्रकार, इस मामले में, आप इन चेतावनियों को सुरक्षित रूप से अनदेखा कर सकते हैं क्योंकि यह जानबूझकर है।

print_color फ़ंक्शन इंद्रधनुष एनम प्रकार के रंग पैरामीटर में लेता है। मैच स्टेटमेंट रंगों के एक सूट से रंग से मेल खाता है जो वेरिएंट नामों के माध्यम से एक्सेस किया जाता है। और अंत में, मेल खाने वाले रंग के आधार पर संदेश को प्रिंट किया जाता है।

आप एक शर्त के आधार पर कई रिटर्न वैल्यू जैसे जटिल ऑपरेशन के लिए पैटर्न मिलान का उपयोग कर सकते हैं।

fnकैलकुलेट_वेवलेंथ(रंग: इंद्रधनुष) -> यू32 {
मिलान रंग {

इंद्रधनुष:: लाल => 700,
इंद्रधनुष:: नारंगी => 590,
इंद्रधनुष:: पीला => 570,
इंद्रधनुष:: हरा => 510,
इंद्रधनुष:: नीला => 475,
इंद्रधनुष:: नील => 445,
इंद्रधनुष:: बैंगनी => 400,
}
}

कैलकुलेट_वेवलेंथ फ़ंक्शन रेनबो एनम प्रकार के एक रंग संस्करण को एक पैरामीटर के रूप में लेता है और एक अहस्ताक्षरित 32-बिट पूर्णांक देता है जो पैटर्न से मेल खाने वाले रंग की तरंग दैर्ध्य है।

जंग कस्टम प्रकार बनाने के लिए स्ट्रक्चर भी प्रदान करता है

Enums कई कार्यों के लिए कस्टम प्रकारों को परिभाषित करने के लिए आसान है, खासकर उन मामलों में जहां फ़ील्ड ज्ञात और निश्चित हैं।

जंग भी ऐसी संरचनाएं प्रदान करता है जिनका उपयोग आप नामित क्षेत्रों के साथ कस्टम प्रकार बनाने के लिए कर सकते हैं। Enums के विपरीत, structs आपको विभिन्न प्रकार के क्षेत्रों को परिभाषित करने की अनुमति देता है जिन्हें आप व्यक्तिगत रूप से एक्सेस और संशोधित कर सकते हैं।