2009-09-14 5 views
5

कक्षा के सदस्यों के लिए मुझे किस नामकरण सम्मेलन का पालन करना चाहिए? अभी, मैं अंडरस्कोर के साथ सभी फ़ील्ड का उपसर्ग कर रहा हूं, और एक्सेसर विधि के लिए नियमित नाम का उपयोग कर रहा हूं, उदाहरण: int _age और int age() { return _age; }सी ++ में फ़ील्ड और एक्सेसर्स के लिए एक अच्छा नामकरण सम्मेलन क्या है?

कोई पसंदीदा दृष्टिकोण?

उत्तर

8

आपको अंडरस्कोर उपसर्ग का उपयोग नहीं करना चाहिए। यह 17.4.3.1.2/1 सी के अनुसार कार्यान्वयन के लिए आरक्षित है ++ मानक:

नाम और समारोह हस्ताक्षर के कुछ सेट हमेशा कार्यान्वयन के लिए आरक्षित हैं:

  • प्रत्येक का नाम शामिल है कि एक डबल अंडरस्कोर (_ _) या एक अंडरस्कोर के साथ शुरू होता है जिसके बाद ऊपरी-केस अक्षर (2.11) किसी भी उपयोग के लिए कार्यान्वयन के लिए आरक्षित होता है।
  • अंडरस्कोर से शुरू होने वाला प्रत्येक नाम वैश्विक नामस्थान में नाम के रूप में उपयोग के लिए कार्यान्वयन के लिए आरक्षित है।

आप Google C++ coding style पर एक बार देख ले सकता है।

+1

एकल अंडरस्कोर केवल * वैश्विक नामस्थान * में आरक्षित हैं। उस ने कहा, मैं सी ++ कोड के लिए m_ पसंद करते हैं। –

+0

नहीं, वे कार्यान्वयन के लिए आरक्षित हैं। और कार्यान्वयन उन्हें वैश्विक नामस्थान में उपयोग करता है। –

+2

और इस तरह प्रारूपण युद्ध शुरू होते हैं ... मैं Google कोड दिशानिर्देशों के बारे में 1/2 से सहमत हूं। अन्य 1/2 सिर्फ गलत आईएमओ हैं। उस पृष्ठ पर सलाह का सबसे अच्छा टुकड़ा "सामान्य ज्ञान और बीई कॉन्स्टेंट का उपयोग करें।" – Glen

1

पर एक नजर डालें व्यक्तिगत तौर पर मैं M_ और हो और सेट उपसर्गों के साथ एक्सेसर विधि, उदा .: m_age साथ सदस्य चर शुरू करने और getAge int करने के लिए सिफारिश करेंगे() {}।

एक अच्छा नियम सम्मेलनों और सर्वोत्तम प्रथाओं के नामकरण के सेट के लिए इन दोनों पुस्तकों को पढ़ने:

http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670/ref=sr_1_1/187-8545911-6271721?ie=UTF8&s=books&qid=1252936825&sr=8-1 (सामान्य प्रोग्रामिंग शैली)

http://www.amazon.com/Coding-Standards-Rules-Guidelines-Practices/dp/0321113586/ref=sr_1_1/177-5450861-2480140?ie=UTF8&s=books&qid=1252936836&sr=8-1 (सी ++ विशिष्ट)

0

यह वास्तव में व्यक्ति से करने के लिए अलग है व्यक्ति। व्यक्तिगत रूप से मैं "getAge()" और "setAge (...)" के साथ "int _age" के लिए जाता हूं। यह क्या करना है इसके बारे में महसूस करने के तरीकों के लिए क्रियाओं के साथ नामों का उपयोग करना आम बात है। बस एक विधि "उम्र" को बुलाकर थोड़ा फैल सकता है। लेकिन फिर, यह स्वाद के बारे में सब कुछ है।

0

निर्भर करता है। मैं का उपयोग करना पसंद: एक्सेसर तरीकों के लिए खेतों
getAge और setAge के लिए
_age
यह बस शैली की बात है ... लेकिन अगर आप प्राप्त/सेट के साथ अपने एक्सेसर तरीकों पूर्व में होना है, तो अपने कोड साफ (मैं हो जाएगा ' मुझे लगता है कि आप सी ++ में काम कर रहे हैं)

3

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

जहां मैं हूं, हम , जैसे m_age का उपयोग सदस्यों का प्रतिनिधित्व करने के लिए करते हैं। यह बहुत अच्छी तरह से काम करता है।

इसके अलावा, क्या आप इस धारणा के तहत हैं कि आपके पास सभी वर्ग के सदस्यों के लिए एक्सेसर्स होना चाहिए? सार्वजनिक कार्यों को वर्ग के व्यवहार का खुलासा करना चाहिए, कक्षा के सदस्यों के नहीं।

11

दो चीजें:

1) अग्रणी अंडरस्कोर का उपयोग करने से बचें। सामान्य सम्मेलन यह है कि संकलक विक्रेता कीवर्ड को पेश करने के साधन के रूप में अंडरस्कोर और डबल अंडरस्कोर दोनों का उपयोग करते हैं। उदाहरण के लिए, माइक्रोसॉफ्ट विजुअल सी ++ में ___declspec। यही कारण है कि आप कुछ सी ++ साहित्य में पिछला अंडरस्कोर (उदा। Int intoo;;) देखते हैं।

2) आपके प्रश्न का कोई जवाब नहीं है। अनुपयोगी होने के लिए खेद है। सी ++ समुदाय इस संबंध में अन्य समुदायों की तरह नहीं है। सूर्य ने जावा के लिए एक शैली मानक स्थापित किया है। माइक्रोसॉफ्ट ने सीएस के लिए एमएसडीएन में एक स्टाइल स्टैंडर्ड दस्तावेज किया है। अन्य समुदाय प्रोग्रामिंग भाषा लेखक की शैली का पालन करते हैं। "वैन रॉसम पाइथन कैसे लिखता है?" या "मैटज़ रूबी कैसे लिखता है?" आप इसे सी ++ में नहीं देखते हैं। यद्यपि स्ट्राउस्ट्रप की किताबों के लिए एक निश्चित शैली है, कोई भी इसका अनुसरण नहीं करता है। यहां तक ​​कि सबसे उल्लेखनीय सी ++ आंकड़े भी अपनी शैली है।

एकमात्र सलाह जो मैं पेशकश कर सकता हूं वह सुसंगत होना है। इससे कोई फ़र्क नहीं पड़ता कि आप कौन सी शैली चुनते हैं।

(नोट: यह ओसीडी वाले व्यक्ति से आ रहा है। मैं इस विषय पर एक निश्चित उत्तर नहीं होने के दर्द को समझ सकता हूं। हालांकि, मुझे जितना पुराना मिलता है, उतना ही मैं इस मामले को छोड़ना सीखता हूं।)

संबंधित मुद्दे