क्या प्रकार और क्षेत्र उपसर्ग नामकरण परंपराओं के सार्थक हैं?


14

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

int nTickCount  
bool bConnected  
object[] m_aItems  
fSum += fWeight * fValue  
class cManager  
enum etSystemStates  
etSystemStates eState  
cManager.cs

लेकिन क्या यह वास्तव में सार्थक है? मुझे शुद्ध प्रभाव का अंदाजा लगाना मुश्किल है कि इस तरह के नामकरण सम्मेलन के बाद त्रुटियों की समझ और पहचान होती है, लेकिन, नेत्रहीन , यह सिर्फ बदसूरत दिखता है। इसके अलावा, cSomething नामक परियोजना में हर वर्ग और फ़ाइल का होना बहुत ही सुंदर लगता है।

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

यदि आपको किसी चीज़ का उपयोग करने की आवश्यकता हो, तो आपको सबसे सुरुचिपूर्ण और प्रभावी नामकरण सम्मेलन क्या मिलेगा? क्या यह प्रकार और / या गुंजाइश को दर्शाता है?

जवाबों:


28

जोएल स्पोल्स्की ने एक लेख लिखा कि क्यों हंगरी संकेतन मौजूद है और इसके लिए क्या इरादा था, जो आपके प्रश्न का उत्तर देने में मदद कर सकता है।

डेटाबेस तालिका के लिए tbl जैसे उपसर्ग, पूर्णांक के लिए int आदि आम तौर पर उपयोगी नहीं होते हैं - उन मामलों में संदर्भ से या आपके विकास के साधनों से क्या काम करना तुच्छ है। शाही माप और मीट्रिक के लिए मुलाकात की तरह कुछ और अधिक समझ में आता है क्योंकि अन्यथा आप केवल यह देख सकते हैं कि वे फ्लोटिंग पॉइंट नंबर हैं।

area = width * height

जबकि पूरी तरह से ठीक लग रहा है

impArea = metWidth * impHeight

आपको सीधे दिखाता है कि कुछ गड़बड़ है।

व्यक्तिगत रूप से मैं सिर्फ वर्णनात्मक चर नामों का उपयोग करता हूं। $ number_of_items स्पष्ट रूप से एक पूर्णांक संख्या है। $ input_file_handle, $ is_active और $ एन्क्रिप्टेड_पासवर्ड में भाषा डेटा प्रकार और शब्दार्थ प्रकार दोनों के प्रकार स्पष्ट हैं।


13

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

विकिपीडिया लेख में इसके पेशेवरों और विपक्षों पर एक अनुभाग है।


13

हां, उपसर्ग उपयोगी हो सकते हैं, लेकिन मेरे पास कुछ सुझाव हैं:

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

दृढ़ता से, सांख्यिकीय रूप से टाइप की गई भाषाएं, केवल एक चर के प्रकार की प्रतिलिपि न करें। उदाहरण के लिए "bSubscribed" C # या Java में बूलियन वैरिएबल के लिए एक बुरा नाम है, क्योंकि आपका IDE पहले से ही जानता है कि प्रकार क्या है। सी में दूसरी ओर, जिसमें एक बूलियन प्रकार का अभाव है, यह उपयोगी जानकारी होगी।

C # और Java में, आप यह दिखाने के लिए एक उपसर्ग पर विचार कर सकते हैं कि कोई वस्तु अशक्त हो सकती है। या कि एक स्ट्रिंग html-बच गया है। या कि यह एक नियमित अभिव्यक्ति, या एक sql कथन का प्रतिनिधित्व करता है। या कि एक सरणी को सॉर्ट किया गया है। अपनी कल्पना का प्रयोग।

मूल रूप से यह अपने आप से पूछने का एक सवाल है कि आपको बताने के लिए एक चर नाम क्या होगा, और यह उस डोमेन और भाषा पर निर्भर करता है जिसमें आप काम कर रहे हैं।


7

वहाँ नामकरण सम्मेलन के कुछ अलग "शैलियों" हैं, और उनमें से अधिकांश कोड को समझने योग्य बनाने में कुछ मूल्य हैं।

एफएआर अधिक महत्वपूर्ण है: चर और कार्यों के लिए वर्णनात्मक नाम का उपयोग करें। "सम", "वेट" और "वैल्यू" के साथ आपके उदाहरण में, आप अधिक सार्थक नाम देना चाह सकते हैं: "TotalCost", "lumberWeight", "lumberValuePerOunce" (मैं यहां कुछ धारणा बना रहा हूं)

मुझे लगता है कि ज्यादातर आधुनिक भाषाओं में काफी विचलित कर देने वाले चरित्र के साथ परिवर्तनशील नाम जैसे सम्मेलनों का संकेत मिलता है।


6

अधिकांश .NET डेवलपर Microsoft के डिजाइन दिशानिर्देशों का पालन करते हैं ( http://msdn.microsoft.com/en-us/library/ms229042.aspx ), जो कि जावा के समान है (मुख्य अंतर Microsoft सदस्य नामों के लिए पास्कल केस का पक्षधर है, जबकि जावा ऊंट के मामले में एहसान)।

इसके अलावा, मैं कहूंगा कि आपके कोड का नमूना आपके द्वारा जोड़े गए अतिरिक्त शोर के कारण बहुत कम पठनीय है।


5

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


5

डेटा प्रकारों (विशेष रूप से आदिम डेटा प्रकार) के साथ चर नामों को प्रीफ़िक्स करने से दृश्य शोर बढ़ जाता है, साथ ही यह जोखिम भी होता है कि अन्यथा छोटा परिवर्तन एक बड़े धमाके का नाम बदल देगा।

पहला बिंदु फिर से, "intStudentCount" वास्तव में किसी भी उदाहरण जैसे "नंबरऑफस्टूडेंट्स" से अधिक स्पष्ट है? "इनवॉइसइल्म" को कम से कम जानकारीपूर्ण नहीं माना जाएगा। (डेटा प्रकार समस्या डोमेन में डेटा के अर्थ के बारे में होना चाहिए, न कि निम्न-स्तरीय प्रतिनिधित्व।)

दूसरे बिंदु के लिए, क्या होता है जब उदाहरण के लिए int का एक समय से पहले चयन लंबे या दोहरे द्वारा प्रतिस्थापित किया जाता है? इससे भी बदतर, क्या होता है जब एक ठोस वर्ग को कई कार्यान्वयन कक्षाओं के साथ एक इंटरफ़ेस में बदल दिया जाता है? कोई भी अभ्यास जो यथार्थवादी रखरखाव परिदृश्यों के बोझ को बढ़ाता है, मेरे लिए संदिग्ध लगता है।


4

यह इस बात पर भी निर्भर हो सकता है कि आप नाम को उपसर्ग क्यों कर रहे हैं, जैसा कि आप इसके साथ उपसर्ग करते हैं उसके विपरीत।

एक उदाहरण के रूप में, मैं एक फॉर्म पर नियंत्रण के नामों के लिए 1-2 अक्षर उपसर्ग का उपयोग करता हूं। ऐसा नहीं है क्योंकि मुझे पता नहीं है कि कंपाइलर को बटन के लिए सही क्लास आसानी से मिल जाएगी (उदाहरण के लिए), लेकिन मैं पहले बड़े फॉर्म डिजाइन करता हूं, फिर बाद में अधिकांश कोड लिखता हूं।

बटनों के लिए बीटी का एक उपसर्ग होने से बाद में बहुत सारे नामों को एक साथ जोड़ देने के बजाय, सही बटन को आसानी से खोजा जा सकता है।

मैं नामकरण चर के लिए उपसर्गों का उपयोग नहीं करता, हालांकि, न तो प्रकार के लिए (जो आमतौर पर वैसे भी उपयोगी नहीं है), न ही अर्थ, संदर्भ या इकाई के लिए (जो हंगेरियन नोटेशन के पीछे मूल विचार है)।


3

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

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


1

उपसर्ग अक्सर वस्तुओं के लिए समझ में आते हैं, उदाहरण के लिए एक ऐसे रूप में जहां आपके पास 20 टेक्स्ट बॉक्स हो सकते हैं, जो उन सभी को tbSomethingसमझ में आता है।

हालाँकि, ज्यादातर मुझे नहीं लगता कि यह सार्थक है, विशेष रूप से मूल्य प्रकारों के लिए।

उदाहरण के लिए, मान लीजिए कि आपके पास था:

short shortValue = 0;
//stuff happens

महीनों बाद आपको लगता है कि आपको इसे बदलने की आवश्यकता है - एक छोटा पर्याप्त बड़ा नहीं है। अब आपके पास है:

int shortValue = 0;
//stuff happens

जब तक आप अब चर का नाम नहीं बदलते (इस मामले में प्रकार बदलने की तुलना में कोड तोड़ने का अधिक जोखिम है) अब आपके पास भ्रामक कोड है।

आप एक ऐसा नाम रखने से बेहतर हैं जो यह बताता है कि यह क्या है:

int loopCounter = 0;
//stuff happens

यदि बाद में इसे लंबे समय तक बदलना होगा: कोई समस्या नहीं।

गतिशील रूप से टाइप की गई भाषाओं में या बिना IDE के इन सम्मेलनों के लिए शायद अधिक तर्क है।


0

मुझे हमेशा चर के सामने के प्रकार के लिए 2 से 4 वर्ण संक्षिप्त नाम का उपयोग करने की संभावना है। कई बार यह थकाऊ लगता है, लेकिन जब आप जटिल डेटा प्रकार या स्थितियों के साथ काम कर रहे होते हैं, तो यह फायदेमंद हो जाता है। मुझे लगता है कि यह निचले ऊंट मामले की श्रेणी में आता है।

ऊपर अपने उदाहरण को देखते हुए, यह होने के लिए थोड़ा पीछे हटा दिया जाएगा:

int intTickCount;
bool boolConnected;
object[] aobjItems;

सरणी को नामित करने के लिए एरर्स के पास हमेशा एक प्रकार होता है। यह मुझे एक साथ समान चर उदाहरणों को समूहित करने की भी अनुमति देता है। उदाहरण के लिए, मैं उपयोग कर सकते हैं ...

taStore.Fill(dtStore);

... जो इंगित करता है कि मेरा स्टोर टेबल एडेप्टर स्टोर डाटाटेबल में भर रहा है।


0

मैंने हमेशा मूल सिद्धांत का पालन करने की कोशिश की है कि उपसर्ग और / या प्रत्यय केवल तभी डाले जाने चाहिए जब यह कोड को अधिक पठनीय बनाता है (जैसा कि सादे अंग्रेजी में है)।

कम गूढ़, बेहतर ...

इस तरह एक विधि क्यों है:

public boolean connect( String h, int p );

जब आपके पास ऐसा कुछ हो सकता है:

public boolean connect( String hostName, int port );

इसके अलावा, आज आईडीई के पास वास्तव में रिफैक्टिंग (विशेष रूप से जावा) चर, विधि के नाम, वर्ग आदि के लिए शक्तिशाली उपकरण हैं ... कम से कम राशि के चरित्र के साथ अधिकतम जानकारी कहने का विचार सिर्फ पुराने जमाने का है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.