प्रोग्रामिंग भाषाओं में एक एनम क्या है?

click fraud protection

एन्यूमरेशन के लिए लघु, एक एनुम परिवर्तनशील प्रकार C (ANSI, मूल K & R नहीं), C ++ और में पाया जा सकता है सी#. यह विचार एक का उपयोग करने के बजाय है पूर्णांक मूल्यों के एक सेट का प्रतिनिधित्व करने के लिए, मूल्यों के प्रतिबंधित सेट के साथ एक प्रकार का उपयोग किया जाता है।

उदाहरण के लिए, यदि हम इंद्रधनुष के रंगों का उपयोग करते हैं, जो हैं

  1. लाल
  2. संतरा
  3. पीला
  4. हरा
  5. नीला
  6. नील
  7. बैंगनी

अगर एनम मौजूद नहीं थे, तो आप एक का उपयोग कर सकते हैं #define (C में) या स्थिरांक इन मूल्यों को निर्दिष्ट करने के लिए C ++ / C # में। उदाहरण के लिए

गिनती करने के लिए बहुत सारे स्याही!

इसके साथ समस्या यह है कि कई और भी हैं ints रंगों की तुलना में। यदि वायलेट का मान 7 है, और कार्यक्रम एक चर के लिए 15 का मान प्रदान करता है तो यह स्पष्ट रूप से एक बग है लेकिन पता नहीं लगाया जा सकता है क्योंकि 15 एक इंट के लिए एक वैध मूल्य है।

बचाव के लिए Enums

एक एनम एक उपयोगकर्ता-परिभाषित प्रकार है, जिसमें एन्यूमरेटर्स नामक नामित स्थिरांक होता है। इंद्रधनुष के रंगों को इस तरह मैप किया जाएगा:

अब आंतरिक रूप से, कंपाइलर इनको पकड़ने के लिए एक इंट का उपयोग करेगा और यदि कोई मान आपूर्ति नहीं करता है, तो लाल 0 होगा, नारंगी 1 है।

instagram viewer

विंदु यह है कि rainbowcolors एक प्रकार है और उसी प्रकार के केवल अन्य चर को इसे सौंपा जा सकता है। C आसान हो रहा है (यानी कम कड़ाई से टाइप किया हुआ), लेकिन C ++ और C # असाइनमेंट की अनुमति नहीं देगा, जब तक कि आप इसे किसी कास्ट का उपयोग करके बाध्य नहीं करते।

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

नीले और इंडिगो का एक ही मूल्य के साथ होना कोई गलती नहीं है क्योंकि एन्यूमरेटर्स में समानार्थी शब्द जैसे कि स्कारलेट और क्रिमसन शामिल हो सकते हैं।

भाषा अंतर

सी में, द परिवर्तनशील घोषणा शब्द से पहले होनी चाहिए enum जैसे की

C ++ में, हालांकि, इसकी आवश्यकता नहीं है rainbowcolors एक अलग प्रकार है जिसे एनम प्रकार के उपसर्ग की आवश्यकता नहीं है।

C # में मानों को टाइप नाम से एक्सेस किया जाता है

एनम की बात क्या है?

एनम का उपयोग करने से अमूर्तता का स्तर बढ़ जाता है और प्रोग्रामर को यह सोचने में मदद मिलती है कि मूल्यों के बारे में चिंता के बजाय इसका क्या मतलब है कि वे कैसे संग्रहीत और एक्सेस किए जाते हैं। यह बग की घटना को कम करता है।

यहाँ एक उदाहरण है। हमारे पास तीन बल्बों के साथ ट्रैफिक लाइट का एक सेट है- लाल, पीला तथा हरा. ब्रिटेन में, इन चार चरणों में ट्रैफिक लाइट का क्रम बदल जाता है।

  1. लाल - ट्रैफिक रुक गया।
  2. दोनों लाल तथा पीला - ट्रैफिक स्टिल को रोका गया, लेकिन हरे रंग में बदलने के लिए रोशनी।
  3. हरा - ट्रैफिक चल सकता है।
  4. पीला - आसन्न परिवर्तन की चेतावनी लाल करने के लिए।

ट्रैफिक लाइट उदाहरण

रोशनी एक नियंत्रण बाइट के नीचे तीन बिट्स को लिखकर नियंत्रित की जाती है। इन्हें बाइनरी में नीचे एक छोटे पैटर्न के रूप में रखा गया है जहां आरवाईजी तीन बिट्स का प्रतिनिधित्व करता है। यदि आर 1 है, तो लाल बत्ती चालू है आदि।

इस मामले में, यह देखना आसान है कि ऊपर दिए गए चार राज्य मान 4 = के अनुरूप हैं लाल पर, 6 = लाल + पीला दोनों पर, 1 = हरा पर और 2 = पीला पर।

इस समारोह के साथ

Enums के बजाय एक वर्ग का उपयोग करना

C ++ और C # में हमें एक क्लास और बनाना होगा अधिभार संचालक | अनुमति देने के लिए या-आईएनजी प्रकार के यातायात बत्तिया.

Enums का उपयोग करके हम बल्ब कंट्रोल बाइट को सौंपे जाने वाले अन्य बिट्स के साथ समस्याओं को रोकते हैं। यह हो सकता है कि कुछ अन्य बिट्स स्व-परीक्षण या "ग्रीन लेन" स्विच को नियंत्रित करते हैं। उस मामले में, एक बग जो इन बिट्स को सामान्य उपयोग में सेट करने की अनुमति देता है, कहर बरपा सकता है।

यह सुनिश्चित करने के लिए, हम बिट्स को मास्क करेंगे SetTrafficlights ()समारोह तो कोई बात नहीं क्या मूल्य में पारित किया है, केवल नीचे तीन बिट्स बदल रहे हैं।

निष्कर्ष

एनम के ये फायदे हैं:

  • वे उन मानों को प्रतिबंधित करते हैं जो एनम चर ले सकते हैं।
  • वे आपको उन सभी संभावित मूल्यों के बारे में सोचने के लिए मजबूर करते हैं जो एनम ले सकते हैं।
  • वे एक संख्या के बजाय एक स्थिर हैं, की पठनीयता बढ़ रही है सोर्स कोड
instagram story viewer