क्या नामकरण कन्वेंशन का उपयोग करने के लिए सी # फ़ंक्शन पैरामीटर


14

ऐसी स्थितियां हैं जब पैरामीटर में पारित एक नाम एक नए प्रकार में कास्ट किया जाएगा, लेकिन पास की गई वस्तु का नाम समान रहना चाहिए। क्लास एट्रिब्यूट्स के मामले में, हम इस ऑपरेटर का उपयोग कर सकते हैं, लेकिन कार्यों में स्थानीय चर के बारे में क्या। क्या कोडन सम्मेलन व्यापक रूप से प्रयोग किया जाता है।

उदाहरण,

void MyFunc(BaseClass myPara)
{
  DerivedClass _mypara = (BaseClass)myPara;
}

या इसके विपरीत

void MyFunc(BaseClass _myPara)
{
  DerivedClass mypara = (BaseClass)_myPara;
}

या कोई अन्य सम्मेलन


1
जो भी अन्य उत्तर आपको नीचे दिए गए हैं, उनमें शैलीगत नियमों का विश्लेषण करने और उन्हें लागू करने के लिए एक छोटा सा उपकरण है: आर्काइव .msdn.microsoft.com
पैट्रिक ह्यूजेस

जवाबों:


11

अंडरस्कोर के साथ या तो मापदंडों या स्थानीय चर को जोड़ना, सी # में बहुत मुहावरेदार नहीं है, यह पढ़ना बहुत आसान नहीं है और अक्सर उपयोग नहीं किया जाता है (हालांकि यह कानूनी है, इसलिए आप चाहें तो इसके लिए स्वतंत्र हैं)।

पैरामीटर और चर के लिए सबसे अच्छा नाम एक वर्णनात्मक नाम है। आपको यह सोचने की ज़रूरत है कि आप प्रकार क्यों बदल रहे हैं, कलाकारों का कारण क्या है। फिर आपको 2 अलग-अलग नामों के साथ आने में सक्षम होना चाहिए। जैसे कि आप "व्यक्ति" को पास कर चुके हैं और इसे "ग्राहक" में बदल दिया है, तब आप व्यक्ति और / या ग्राहक को चर नामों में उपयोग कर सकते हैं।

यदि आप वास्तव में 2 अलग-अलग नामों के बारे में नहीं सोच सकते हैं तो मैं नाम में "के रूप में" का उपयोग करूंगा ( इस बारे में कुछ दिन पहले इस साइट पर एक सवाल था )। उदाहरण के लिए, आप "myParaAsDerived" का उपयोग स्थानीय चर के लिए करेंगे।

यदि संभव हो तो मैं इसका उपयोग नहीं करूंगा, मैं आपके द्वारा हल की जाने वाली समस्या के बारे में कठिन सोचूंगा और कौन से सार्थक नामों का उपयोग किया जा सकता है, लेकिन यदि बाकी सभी विफल होते हैं तो यह काफी पठनीय है।


बस एक डबल-चेक (मैं C # से परिचित नहीं हूं)। वास्तव में अग्रणी अंडरस्कोर C # में "ठीक से" कानूनी है? C और C ++ में, प्रमुख (या दोगुना) अंडरस्कोर वाले पहचानकर्ता आरक्षित हैं, इसलिए यद्यपि वे एक अर्थ में कानूनी हैं, आपको अपने स्वयं के पहचानकर्ताओं को इस तरह परिभाषित नहीं करना चाहिए। csharp.comsci.us/etymology/identifiers.html सुझाव देता है कि C # समान हो सकता है (नीचे देखें, "सीमाओं का अंतिम") लेकिन वास्तव में "आरक्षित" नहीं कहता है।
स्टीव

प्रमुख अंडरस्कोर C # में पूरी तरह से कानूनी हैं और मेरे द्वारा ज्ञात किसी भी सम्मेलन के तहत आरक्षित नहीं हैं।
स्टीव

9

सबसे पहले उपयोग करना

void MyFunc(BaseClass _myPara)
{
} 

स्पष्ट रूप से गलत है! बहुत सारे c # कोडिंग मानकों के अनुसार सभी फ़ील्ड नामों पर "_" उपसर्ग का उपयोग करें ! आपको कोड को अन्य प्रोग्रामर द्वारा समझने में आसान होने की आवश्यकता है, इसलिए कोड को इस तरह से नहीं लिखा जाना चाहिए जो बहुत सारे सी प्रोग्रामर को गुमराह करेगा।

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


4

यदि आप उन्हें किसी चीज़ के साथ उपसर्ग करना चाहते हैं, तो आपको p_पैरामीटर के लिए उपयोग करना चाहिए : सामान्य तौर पर मुझे लगता है कि यदि आप ऐसा करते हैं तो आप बहुत सारे लोगों को परेशान करेंगे। लेकिन संगत रहें, इसे केवल एक ही स्थान पर न करें क्योंकि आपको चर के लिए दो अलग-अलग नामों की आवश्यकता है जो आप एक ही नाम देना चाहते हैं।

चर नामकरण के साथ एक अच्छा सामान्य नियम जाता है;

  • यदि आपके पास केवल एक प्रकार का ऑब्जेक्ट है, तो इसे इसके फ़ंक्शन से नाम दें:

    var builder = new PizzaBuilder();
  • यदि आपके पास उनके कार्य और विशेषता के आधार पर एक से अधिक नाम हैं:

    var pizzaBuilder = new PizzaBuilder();
    var milkShakeBuilder = new MilkShakeBuilder();

पैरामीटर के लिए p_ (या बस p) एक पुराना सम्मेलन है जिसका उपयोग C ++ और C. में बहुत अधिक किया गया है। यह स्थानीय और (C ++ में) m_ के लिए सदस्य-चर के लिए जाना जाता है। मैंने इसे पास्कल, मोडुला 2 और अदा में भी देखा है, इसलिए यह सिर्फ सी-फैमिली की बात नहीं है। यह है थोड़े प्यार यह या नफरत-यह है, हालांकि। मैंने इसे लगभग अस्पष्ट रूप से उपयोग किया है, मेरा बहाना स्टीव हीघ्स ने "अस" के लिए तर्क दिया। जैसे सेटर विधियां अक्सर करते हैं m_Whatever = p_Whatever;- दो पहचानकर्ताओं को सार्थक रूप से अलग-अलग नाम देना अजीब होगा। लेकिन मैंने सवाल करना शुरू कर दिया है कि क्या उन मामलों में लगातार सम्मेलन को सही ठहराने के लिए पर्याप्त हैं।
स्टीव 314

4

C # नामकरण परंपराएं आपके पास होंगी:

  • PascalCasing का उपयोग तरीकों, सार्वजनिक गुणों और वर्ग नामों के लिए
  • इंटरफ़ेस नामों के लिए IPascalCasing (I को प्रारंभ में नोटिस करें) का उपयोग करना
  • विधि मापदंडों और स्थानीय चर के लिए camelCasing का उपयोग करना
  • वर्ग विस्तृत निजी क्षेत्रों के लिए _underscoredCamelCasing का उपयोग करना

और कृपया आयु अंकन से दूर रहें। यह व्यर्थ है और C # सम्मेलनों का पालन नहीं करता है।


निजी क्षेत्र पास्कल-आवरण हैं यदि वे स्थिर हैं।
सारा

2

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

ओटिंगर का कहना है कि आपका कोड यथासंभव मानवीय रूप से पठनीय होना चाहिए, साथ ही लिखा हुआ गद्य भी ...

public void Function(string p_Parameter1, string p_Parameter2)

... अधिक पठनीय होगा ...

public void Function(string parameter1, string parameter2)

... जहां पैरामीटर 1 और 2 संबंधित चर के लिए वर्णनात्मक नाम हैं।

यहाँ लिंक, निश्चित रूप से देखने लायक है: लिंक


-3

मेरा मानना ​​है कि पैरामीटर प्रत्यय: स्ट्रिंग s_, int i_, आदि

मेरा यह भी मानना ​​है कि पैराम नाम संभव के रूप में छोटा और सामान्य होना चाहिए।

अब कारणों के लिए:

  • फ़ंक्शन में, आप किसी भी तरह से पैरामीटर को संशोधित नहीं करना चाहते हैं, यदि आपको एक संशोधित संस्करण की आवश्यकता है, तो इसे छड़ी करने के लिए एक नया चर बनाएं। प्रत्यय के साथ पार्स का नामकरण सुनिश्चित करेगा कि आपका भुगतान करने पर उन्हें असाइन नहीं किया जाए। ध्यान।
  • इस नियम के अपवाद तब आते हैं जब पेम रेफरी या बाहर होता है। हालांकि मैं अभी भी उन पर प्रत्यय का उपयोग करता हूं।
  • छोटे सामान्य नाम क्यों? आपको अपने कार्य का दस्तावेजीकरण करना चाहिए ताकि आपको पता चले कि s_ वास्तव में वर्णनात्मक अर्थ में क्या है। इस तरह से उस रास्ते से, लघु जेनेरिक का उपयोग करना आसान है जब आप इसी तरह के कार्यों के समूह बना रहे हैं, या संशोधन के लिए एक शुरुआती बिंदु के रूप में दूसरे फ़ंक्शन को परिवहन करने के लिए एक फ़ंक्शन बॉडी को क्लिप कर रहे हैं।
  • जेनेरिक नामों का वास्तविक लाभ यह है कि आपको ज्यादातर मामलों में उस पैरामीटर को याद नहीं करना है। आपको पता है कि आपका स्ट्रिंग हो रहा है, इसलिए इसका s_, आदि और आश्चर्य नहीं है कि क्या यह 'फ़ाइलनाम' है या क्या यह 'filepath' था या यह 'fullpath' था, यह एकमात्र स्ट्रिंग है इसलिए इसका 's_' है।

सब कुछ व्यापार-नापसंद है, और चाहे आप कुछ का उपयोग करें या नहीं, यह इस बात पर बहुत निर्भर करेगा कि यह आपकी वर्तमान शैली में कैसे फिट बैठता है।


6
-1: ए) आप उपसर्ग कर रहे हैं, प्रत्यय नहीं; b) यह हंगेरियन नोटेशन है और इसे डू-डू के रास्ते जाना चाहिए ।
पीटर के।

1
क्या C # प्रकार सुरक्षित नहीं है?
प्रियव जू

1
@ पेटर के। - यह मुझे पसंद है sऔर iसंक्षिप्त नाम हैं क्योंकि यह सिर्फ एक उदाहरण है। IOW मुझे नहीं लगता कि यह हंगेरियन है - मुझे लगता है कि आप एक छोटे से नाम की गलत व्याख्या कर रहे हैं जो सिर्फ क्लासिक है string sया int iमैं एक बेहतर नाम वाली चीज नहीं सोच सकता हूं, लेकिन अंडरस्कोर प्रत्ययों के साथ चिपके हुए हैं ।
स्टीव 314

@ Steve314: आह, आप सही हो सकते हैं! देखते हैं कि मार्क जवाब देता है या नहीं।
पीटर के।

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