परिवर्तनीय नामकरण सम्मेलनों? [बन्द है]


11

मैंने अभी से ReSharper (C # के लिए) का उपयोग करना शुरू कर दिया है और मुझे इसके कोड को खोजने वाले की तरह की गंध आती है, यह मुझे मेरे लेखन के बारे में कुछ चीजें दिखाता है, जिसका मतलब है कि मैं एक लंबे समय से पहले (मुख्य रूप से परिवर्तनीय नामकरण सम्मेलनों) को ठीक कर रहा हूं।

इसने मुझे तरीकों और उदाहरण चर के लिए मेरे कुछ नामकरण सम्मेलनों पर पुनर्विचार करने का कारण बना। ReSharper का सुझाव है कि उदाहरण चर कम ऊंट मामले हो और एक अंडरस्कोर के साथ शुरू हो। थोड़ी देर के लिए मैं अपने सभी स्थानीय चर कम ऊंट मामले बनाने का मतलब है, लेकिन अंडरस्कोर आवश्यक है? क्या आपको यह सहज लगता है? मुझे यह सम्मेलन पसंद नहीं है, लेकिन मैंने भी अभी तक इसकी कोशिश नहीं की है, इसके बारे में आपकी क्या राय है?

दूसरी बात जिसने मुझे पुनर्मूल्यांकन करने के लिए प्रेरित किया, वह है GUI इवेंट हैंडलर के लिए मेरा नामकरण परंपराएं। मैं आमतौर पर ControlName_Action के वीएस मानक का उपयोग करता हूं और मेरे नियंत्रण आमतौर पर आयु संकेतन (प्रत्यय के रूप में, कोड में यह स्पष्ट करने में मदद करते हैं कि उपयोगकर्ता को क्या दिखाई दे रहा है और वैसा ही नाम चर के साथ काम करते समय क्या नहीं है), इसलिए मैं OK -btn_Click के साथ समाप्त होता हूं ( ), आपकी क्या राय है? क्या मुझे ReSharper कन्वेंशन का शिकार होना चाहिए या अन्य समान रूप से मान्य विकल्प हैं?

जवाबों:


19

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

उपकरण को अपने मानकों को परिभाषित न करने दें - इसे अपने स्वयं के लागू करने के लिए उपयोग करें।

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


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

पर्याप्त रूप से, मैंने कुछ और व्यक्तिगत अनुभव देने के लिए संपादन किया है।
मझिल्टन

11
+1 के लिए "टूल को अपने मानकों को परिभाषित न करने दें"
Techie007

"उपकरण को अपने मानकों को परिभाषित न करने दें" सभी समय के मेरे पसंदीदा प्रोग्रामिंग उद्धरणों में से एक बन गया है।
seggy

18

इसके संबंध में

लेकिन क्या अंडरस्कोर जरूरी है? क्या आपको यह आरामदायक लगता है?

अंडरस्कोर का उपयोग करने के बारे में एक बात मुझे बहुत पसंद है, वह यह है कि यह "इस" के उपयोग को नाटकीय रूप से कम करता है।

विचार करें:

public void Invoke(int size) {
    _size = size;
}

अंडरस्कोर के बिना, आपको लिखना होगा:

public void Invoke(int size) {
    this.size = size;
}

जो संभावित रूप से सूक्ष्म त्रुटि का परिचय देता है:

public void Invoke(int size) {
    size = size;    // urgh ... no this! 
}

इसके अलावा, कोड पूरा करना क्लीनर है क्योंकि केवल अंडरस्कोर बांधने से आपको केवल निजी क्षेत्रों की एक सूची मिलती है, जबकि "यह" के साथ आपको हर चीज की एक सूची मिलती है।

इसके संबंध में

आमतौर पर हंगेरियन नोटेशन का उपयोग करते हैं

फ़्रेमवर्क डिज़ाइन दिशानिर्देश: पुन: प्रयोज्य .NET पुस्तकालयों के लिए कन्वेंशन, मुहावरे और पैटर्न कहते हैं:

हंगेरियन नोटेशन का उपयोग करें

अस्पष्टता के लिए बहुत कम जगह छोड़कर:)


कड़ाई से बोलते हुए, यदि आप फ्रेमवर्क डिज़ाइन दिशानिर्देशों का पालन करते हैं, तो यह बताता है कि सार्वजनिक तरीकों से पारित होने वाले चर भी राजधानियों में होने चाहिए, विधि के नाम के अलावा :)
सर्जिकल कोडर

pzycoman ... क्या आप कृपया मुझे बता सकते हैं कि यह कहाँ है। एक त्वरित नज़र और मैं सार्वजनिक विधियों से पारित होने वाले चर में राजधानियों का उपयोग करने के लिए कोई संदर्भ नहीं पा सका। लेकिन उदाहरण के लिए, दूसरे संस्करण के पी 118 पर, एक उदाहरण है जहां सार्वजनिक तरीके राजधानियों का उपयोग नहीं कर रहे हैं, लेकिन निचले मामले में। "सार्वजनिक शून्य लिखें (यूइंट वैल्यू)?"
दकोतह उत्तर

10
नाम के टकराव के मामले में मैं कहूंगा कि इससे this.sizeकहीं अधिक स्पष्ट है _size। अंडरस्कोर नाम का उपयोग करने से सूक्ष्म त्रुटि नहीं होती है, फिर भी आप स्वयं को आकार प्रदान कर सकते हैं, हालांकि उम्मीद है कि आपका संकलक आपको बताएगा।
edA-qa मोर्ट-ओर-वाई

2
ज़रूर, आप हमेशा खुद को कुछ सौंप सकते हैं। के बीच प्रमुख अंतर this.sizeऔर _sizeसंगति है। इसके साथ this.sizeही यह वैकल्पिक है। उदाहरण के लिए, यदि कोई अन्य निजी क्षेत्र कहा जाता है name, तो this.nameकोड में उपयोग करने की कोई आवश्यकता नहीं है , मैं बस nameकिसी भी संघर्ष के बिना आसानी से उपयोग कर सकता हूं । क्योंकि thisकभी-कभी उपयोग किया जा सकता है, और अन्य समय नहीं है इसलिए उपयोग thisकरना हीन है। दूसरी ओर, इसके साथ कोई अस्पष्टता नहीं है _...
दकोतह उत्तर

2
ऊ ... लोग अभी भी भाषा में अंडरस्कोर का उपयोग क्यों करते हैं जो एक बेहतर तरीका प्रदान करते हैं।
रिग

8

संगति वास्तव में कुंजी है। वह और स्पष्टता, अर्थात सब कुछ संक्षिप्त करके टाइपिंग को बचाने की कोशिश न करें। Intellisense आपका टाइपिंग सेवर है, न कि क्रिप्टिक (लेकिन छोटा!) नाम।


2
+1: एक कन्वेंशन चुनें और उससे चिपके रहें। कुछ भी करेंगे (सिस्टम हंगेरियन को छोड़कर)।
डोनल फैलो

संगति केवल एक चीज नहीं है। उदाहरण के लिए, कोई अपने कोड के लिए एक सुसंगत नामकरण सम्मेलनों का चयन कर सकता है, लेकिन अगर वह सम्मेलन अन्य नामकरण सम्मेलनों से बेतहाशा अलग है, तो अन्य पुस्तकालयों का उपयोग करते समय ... अनिवार्य रूप से विसंगतियां होंगी। उदाहरण के लिए, यदि मैं जावा में C # से संपत्ति के नामकरण सम्मेलनों का उपयोग करना चुनता हूं, तो मैं अन्य सभी प्रणालियों में कोड कैसे लिखा जाता है, इसके अनुरूप नहीं होगा। मैं लिख सकता था order.Size()(जैसा कि विरोध किया गया order.getSize()) लेकिन चूंकि अन्य पुस्तकालय गेटर्स का उपयोग करते हैं और मेरा कोड संगत नहीं होगा।
दकोतह उत्तर

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

@DakotahNorth - यह एक घर शैली है करने के लिए समझ में आता है, लेकिन इससे परे, स्थिरता प्रमुख विचार है। जब तक कन्वेंशन बहुत दूर की दीवार नहीं है, तब तक इसे आसानी से बाहरी / नए डेवलपर्स द्वारा उठाया जा सकता है। वास्तव में, यह घर की शैली को प्रकाशित करने के लायक है, किसी भी अनिश्चितता को दूर करने के लिए।
cjmUK

7

अंडर # के साथ सी # शुरू या संरक्षित नाम सार्वजनिक भाषा विशिष्टता के खिलाफ है। यह केवल निजी सदस्यों के मामले में सही है।

MSDN से:

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

देखें: http://msdn.microsoft.com/en-us/library/12a7a7h3.aspx

यहाँ आप अंडरस्कोर के बारे में चेतावनी पढ़ सकते हैं:

अंडरस्कोर (_) से शुरू होने वाले तत्व नाम कॉमन लैंग्वेज स्पेसिफिकेशन (सीएलएस) का हिस्सा नहीं होते हैं, इसलिए सीएलएस-अनुरूप कोड ऐसे नामों का परिभाषित करने वाले घटक का उपयोग नहीं कर सकता है। हालांकि, एक तत्व नाम में किसी अन्य स्थिति में एक अंडरस्कोर सीएलएस-अनुपालन है।

देखें: http://msdn.microsoft.com/en-us/library/81ed9a62.aspx

संरक्षित सदस्य समस्या हैं क्योंकि आप किसी अन्य भाषा में लिखी गई कक्षा से प्राप्त कर सकते हैं।

लेकिन शायद यह आपके मामले में समस्या नहीं है यदि आपको सीएलएस-कंपाइलेंट कोड की आवश्यकता नहीं है।


4

मुझे अंडरस्कोर पसंद है। आप पहली नज़र में जानते हैं कि चर एक वर्ग सदस्य और निजी है।

निश्चित रूप से आईडीई आपको बता सकता है कि जब आप उस पर माउस घुमाते हैं, लेकिन "पहली नज़र" को हराया नहीं जा सकता है। आप जानते हैं कि स्थानीय चर क्या है, और आपकी आंखों के साथ एक सदस्य चर क्या है। कोई स्क्रॉलिंग या माउस की आवश्यकता नहीं है।

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


1

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

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

तो मेरा लेना यह होगा कि क्या आप उन उपकरणों को फिर से कॉन्फ़िगर करने के लिए एक वैध कारण पा सकते हैं जो आपने अभी तक एक भाग्य खर्च किया है, सभी तरीकों से। यदि आप बदलाव करने को उचित नहीं ठहरा सकते हैं, तो न करें।

ध्यान रखें कि प्रत्येक और हर परिवर्तन को बनाए रखने के लिए एक सतत लागत (वास्तविक और छिपी) है। जितना कम हो, उतनी कम लागत। उदाहरण के लिए - उस नए आदमी जिसका मैंने उल्लेख किया है - कोई बदलाव नहीं इसका मतलब वह अपने मैनुअल को पढ़ सकता है। रीकॉन्फ़िगर करें - आपको परिशिष्ट लिखना होगा, इसे ऑथर के सामान के साथ स्टोर करना होगा, इसे रिटायर करना होगा और उन्हें अपने मैनुअल को पढ़ने के बाद इसे पढ़ना होगा। शायद 2 आदमी की दुकान के लिए कोई समस्या नहीं है, लेकिन 100 आदमी की दुकान के बारे में क्या?


1

जिन दो नियमों के बारे में आप पूछ रहे हैं, वे निजी क्षेत्र के नामों की शुरुआत में रेखांकित करते हैं, और विधि के नाम आमतौर पर C # विकास मंडल में आदर्श के रूप में माने जाते हैं। उन सम्मेलनों को अपनाने से आपका कोड अन्य डेवलपर्स के लिए तुरंत अधिक समझ में आ जाएगा, क्योंकि वे मन के फ्रेम हैं जो उन्हें संचालन में उपयोग किया जाता है।

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


1

मेरे मामले में, कैमलकेस और अंडरस्कोर का उपयोग वर्णनात्मक (पढ़ें: लंबे) चर नाम और कोड पूरा करने में मदद करता है। मुझे यकीन नहीं है कि विज़ुअल स्टूडियो ऑटोकंप्लीशन कैसे काम करता है, लेकिन QtCreator में और कुछ हद तक, ग्रहण, उदाहरण के लिए, एक टाइप कर सकता है

sDI

और इसका विस्तार किया है

someDescriptiveIdentifier

आपके पास नाम होने की स्थिति में थोड़ा सा टाइप करता है

someDescriptiveName, someOtherDescriptiveName, someOtherButNotTheSameDescriptiveName

जब मैं "वर्णनात्मक नामकरण मोड" में उत्पादन करता हूं।

अंडरस्कोर का उपयोग करके मैं यह निर्धारित कर सकता हूं कि मुझे कौन सा नाम चाहिए जो स्वतः पूर्ण हो

someDescriptiveIdentifier

या

_someDescriptiveClassMember

आशा है कि मेरी व्याख्या पर्याप्त स्पष्ट है :)

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