hungarian notation `M_` चरणीय उपसर्ग का क्या अर्थ है?




hungarian-notation (5)

मैं प्रायः ट्यूटोरियल, उदाहरण और अन्य कोड में विशेष रूप से गेम विकास से संबंधित चर ( m_World , m_Sprites , ...) के लिए m_ उपसर्ग का उपयोग करता m_World

लोग चर के लिए उपसर्ग m_ क्यों जोड़ते हैं?


सी ++ में यह सामान्य प्रथा है। ऐसा इसलिए है क्योंकि सी ++ में आपके पास सदस्य फ़ंक्शन और सदस्य चर के लिए समान नाम नहीं हो सकता है, और गेटर फ़ंक्शंस को अक्सर "प्राप्त" उपसर्ग के बिना नामित किया जाता है।

class Person
{
   public:
      std::string name() const;

   private:
      std::string name; // This would lead to a compilation error.
      std::string m_name; // OK.
};
main.cpp:9:19: error: duplicate member 'name'
      std::string name;
                  ^
main.cpp:6:19: note: previous declaration is here
      std::string name() const;
                  ^
1 error generated.

http://coliru.stacked-crooked.com/a/f38e7dbb047687ad

"सदस्य" के लिए "m_" राज्य। उपसर्ग "_" भी आम है।

आपको प्रोग्रामिंग भाषाओं में इसका उपयोग नहीं करना चाहिए जो विभिन्न सम्मेलनों / व्याकरण का उपयोग कर इस समस्या को हल करता है।


स्वच्छ संहिता में: एग्इल सॉफ्टवेयर सॉफ्टवेयर शिल्प कौशल की एक पुस्तिका इस उपसर्ग के उपयोग के बारे में एक स्पष्ट सिफारिश है:

आपको m_ साथ सदस्य चर को उपसर्ग करने की भी आवश्यकता नहीं है। आपकी कक्षाएं और कार्य इतना छोटा होना चाहिए कि आपको उनकी आवश्यकता नहीं है।

इसका एक उदाहरण (सी # कोड) भी है:

खराब अभ्यास:

public class Part
{
    private String m_dsc; // The textual description

    void SetName(string name)
    {
        m_dsc = name;
    }
}

अच्छा अभ्यास:

public class Part
{
    private String description;

    void SetDescription(string description)
    {
        this.description = description;
    }
}

हम स्पष्ट रूप से अस्पष्टता ( यानी , description सदस्य और description पैरामीटर) के मामले में सदस्य चर के संदर्भ में भाषा संरचनाओं के साथ गिनते हैं: this


जैसा कि अन्य उत्तरों में बताया गया है, m_ उपसर्ग का उपयोग यह इंगित करने के लिए किया जाता है कि एक चर एक वर्ग सदस्य है। यह हंगेरियन नोटेशन से अलग है क्योंकि यह चर के प्रकार को इंगित नहीं करता है लेकिन इसका संदर्भ है।

मैं सी ++ में m_ का उपयोग करता हूं लेकिन कुछ अन्य भाषाओं में नहीं जहां 'यह' या 'स्वयं' अनिवार्य है। मैं 'यह->' को C ++ के साथ उपयोग करना पसंद नहीं करता क्योंकि यह कोड को अव्यवस्थित करता है।

एक अन्य जवाब में कहा m_dsc है कि m_dsc "खराब अभ्यास" और 'विवरण;' है "अच्छा अभ्यास" है लेकिन यह एक लाल हेरिंग है क्योंकि समस्या संक्षेप में है।

एक और जवाब कहता है कि this टाइपिंग इंटेलिसेन्स को पॉप अप करता है लेकिन किसी भी अच्छे आईडीई में मौजूदा क्लास सदस्यों के लिए इंटेलिसेन्स को पॉप अप करने के लिए एक हॉटकी होगी।


m_ उपसर्ग अक्सर सदस्य चर के लिए उपयोग किया जाता है - मुझे लगता है कि इसका मुख्य लाभ यह है कि यह सार्वजनिक संपत्ति और निजी सदस्य चर के बीच स्पष्ट अंतर बनाने में मदद करता है:

int m_something

public int Something
{
    get { return this.m_something; }
}

यह बैकिंग चर के लिए एक सतत नामकरण सम्मेलन रखने में मदद कर सकता है, और m_ उपसर्ग ऐसा करने का एक तरीका है - जो केस-असंवेदनशील भाषाओं में काम करता है।

यह कितना उपयोगी है उन भाषाओं और उपकरणों पर निर्भर करता है जिनका आप उपयोग कर रहे हैं। मजबूत रिफैक्टर टूल और इंटेलिजेंस के साथ आधुनिक आईडीई इस तरह के सम्मेलनों की कम आवश्यकता रखते हैं, और यह निश्चित रूप से ऐसा करने का एकमात्र तरीका नहीं है, लेकिन किसी भी मामले में अभ्यास के बारे में जागरूक होना उचित है।


जैसा कि कई अन्य प्रतिक्रियाओं में बताया गया है, m_ एक उपसर्ग है जो सदस्य चर को दर्शाता है। यह आमतौर पर सी ++ दुनिया में उपयोग किया जाता था और जावा सहित अन्य भाषाओं में भी प्रचारित किया जाता था।

एक आधुनिक आईडीई में यह पूरी तरह से अनावश्यक है क्योंकि सिंटैक्स हाइलाइटिंग यह स्पष्ट करता है कि कौन से चर स्थानीय हैं और कौन से सदस्य हैं । हालांकि, 90 के उत्तरार्ध में सिंटैक्स हाइलाइटिंग के समय तक, सम्मेलन कई सालों से आसपास रहा था और दृढ़ता से सेट किया गया था (कम से कम सी ++ दुनिया में)।

मुझे नहीं पता कि आप कौन से ट्यूटोरियल का जिक्र कर रहे हैं, लेकिन मुझे लगता है कि वे दो कारकों में से एक के कारण सम्मेलन का उपयोग कर रहे हैं:

  • वे सी ++ ट्यूटोरियल हैं, जो एम_ कन्वेंशन में इस्तेमाल किए गए लोगों द्वारा लिखे गए हैं, और / या ...
  • वे सिंटैक्स हाइलाइटिंग के बिना सादे (मोनोस्पेस्ड) टेक्स्ट में कोड लिखते हैं, इसलिए एम_ सम्मेलन उदाहरणों को स्पष्ट बनाने के लिए उपयोगी है।