स्थिरांक के लिए सी # नामकरण सम्मेलन?


419
private const int THE_ANSWER = 42;

या

private const int theAnswer = 42;

व्यक्तिगत रूप से मुझे लगता है कि आधुनिक IDEs के साथ हमें camelCase के साथ जाना चाहिए क्योंकि ALL_CAPS अजीब लगता है। तुम क्या सोचते हो?


4
@mmiika: इस उदाहरण में "द" का क्या अर्थ है? क्या यह "द हिचहाइकर गाइड टू द गैलेक्सी" है या यह कुछ सी ++ कोडिंग मानक से अधिक है? (उदाहरण के लिए मैकिंटोश के लिए एक पुराना C ++ फ्रेमवर्क, THINK C [और बाद में, Symantec C ++], सूचक / संदर्भ सदस्यों के लिए "अपना" और "स्केलर सदस्यों के लिए" का उपयोग किया।)
पीटर मोर्टेंसन

5
@ पेटर, चूंकि स्थिर का मान 42 है, इसलिए मैं दृढ़ता से यह द हिचहाइकर गाइड टू द गैलेक्सी का एक संदर्भ है ।
अल्बेरियो

@PeterMortensen यह रचनात्मक है! लेकिन इसके एंप्लॉयी और इसके कोस्ट्यूमर जैसे नामों से लगता है कि वे भ्रामक हो सकते हैं।
कैमिलो मार्टिन

4
MSDN: कैपिटलाइज़ेशन कन्वेंशन msdn.microsoft.com/en-us/library/vstudio/ms229043(v=vs.90).aspx
कप्तान समझदार

मैं पसंद करता हूं theAnswer। पहले एक हंगेरियन नोटेशन फैन था, लेकिन जब से मैंने इसका इस्तेमाल नहीं करना सीखा, मैं नामकरण में किसी भी मेटा इंडिकेशन से सख्ती से बचना पसंद करता हूं। उसी तरह इंटरफेस के लिए चला जाता है IInterface। मैं पसंद करता हूं Interfacable। लेकिन जब एक टीम में काम करते हुए, मुझे नियमों का पालन करना पड़ा :(
nawfal

जवाबों:


484

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

private const int TheAnswer = 42;

पास्कल पूंजीकरण सम्मेलन को Microsoft के फ्रेमवर्क डिज़ाइन दिशानिर्देशों में भी प्रलेखित किया गया है ।


51
दरअसल, स्टाइलकॉप "Microsoft उत्पाद नहीं है," लेकिन "Microsoft (शाम और सप्ताहांत पर) में एक बहुत ही भावुक डेवलपर द्वारा विकसित एक उपकरण है।" ( विवरण के लिए blogs.msdn.com/sourceanalysis/archive/2008/07/20/… और blogs.msdn.com/bharry/archive/2008/07/19/… ) देखें।) कहा जा रहा है, Microsoft का नामकरण। सम्मेलनों में स्थिरांक के लिए पास्कल आवरण का उपयोग किया जाता है, इसलिए उपकरण केवल उस मानक को लागू कर रहा है जो Microsoft प्रकाशित और समर्थन करता है
bdukes

12
@bdukes - मैंने यह नहीं कहा था कि यह एक Microsoft उत्पाद था, हालाँकि पूरे संगठन में इसका बहुत उपयोग और समर्थन है (एक पूर्व कर्मचारी के रूप में, मैं इसे सालों पहले इस्तेमाल कर रहा था, जब तक कि Microsoft के बाहर किसी ने इस पर अपना हाथ नहीं मिला, इसलिए मैं इसकी विरासत से अच्छी तरह वाकिफ हूं)।
ग्रेग बीच

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

52
मैं TheAnswer संकेतन के साथ जाऊंगा, जब मूल्य 42 होगा, तो उस स्थिति में जब मैं निश्चित रूप से ALL_CAPS दृष्टिकोण के साथ रहना चाहूंगा।
बेनोइट

4
एक निजी क्षेत्र में ऊँट का आवरण नहीं होना चाहिए, अगर यह स्थिर है?
मार्कस मेयर

70

नेत्रहीन, अपर केस जाने का रास्ता है। यह उस तरह से पहचानने योग्य है। विशिष्टता के लिए और अनुमान लगाने का कोई मौका नहीं छोड़ते, मैं UPPER_CASE के लिए वोट करता हूं!

const int THE_ANSWER = 42;

नोट : ऊपरी मामला तब उपयोगी होगा जब पृष्ठ के शीर्ष पर और अंतर्मुखी उद्देश्यों के लिए एक ही फ़ाइल के भीतर स्थिरांक का उपयोग किया जाना है; हालाँकि, अगर उन्हें एक स्वतंत्र वर्ग में ले जाया जाए, तो ऊपरी मामले का उपयोग करने से बहुत फर्क नहीं पड़ेगा, उदाहरण के लिए:

public static class Constant
{
    public static readonly int Cons1 = 1;
    public static readonly int coNs2 = 2;
    public static readonly int cOns3 = 3;
    public static readonly int CONS4 = 4;
}

// Call constants from anywhere
// Since the class has a unique and recognizable name, Upper Case might lose its charm
private void DoSomething(){
var getCons1 = Constant.Cons1;
var getCons2 = Constant.coNs2;
var getCons3 = Constant.cOns3;
var getCons4 = Constant.CONS4;
 }

5
मैं भी इसे पसंद करता हूं क्योंकि पास्कल आवरण आसानी से संपत्ति के संदर्भ में भ्रमित हो सकता है।
bc3tech

8
उपरोक्त सिफारिशों के बावजूद, मैं स्थिरांक के लिए UPPER_CASE पसंद करता हूं, क्योंकि यह उन्हें किसी भी अन्य मामलों की तुलना में पहचानना बहुत आसान बनाता है।
डब स्टाइल

23
@usefulBee "SNAKE_CASE" C # में दृढ़ता से हतोत्साहित किया जाता है; यह उत्तर गलत है। C # में consts के लिए सही मामला "टाइटलकेस" है।
BrainSlugs83

13
@ BrainSlugs83, मुझे नहीं लगता कि यहां सही या गलत है; यह वरीयता के लिए नीचे आता है और कोड को स्पष्ट करता है।
उपयोगी

2
@usefulBee सहमत हैं। लेकिन यह अभी भी चिह्नित करना अच्छा है कि इसे लिखने का सर्वसम्मति तरीका क्या है । मैं हाल ही में रूबी कोड का लोड कर रहा हूं, और मुझे लगता है कि SCREAMING_SNAKE_CASE समझ में आता है: यह बहुत स्पष्ट है कि यह कुछ विशेष है, और आपको इसके बारे में जानने के लिए परिभाषा को जानने की जरूरत नहीं है। आप इसे तुरंत जानते हैं।
प्रति लुंडबर्ग

69

वास्तव में, यह है

private const int TheAnswer = 42;

कम से कम यदि आप .NET लाइब्रेरी को देखते हैं, जो IMO नामकरण परंपराओं को तय करने का सबसे अच्छा तरीका है - तो आपका कोड जगह से बाहर नहीं दिखता है।


23

मैं अभी भी कॉन्स्टेबल वैल्यू के लिए अपरकेस के साथ जाता हूं, लेकिन यह किसी विशेष कारण से अधिक आदत से बाहर है।

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

मेरा निष्कर्ष: ऊंट आवरण के साथ जाओ। शायद मैं अपनी शैली भी बदलूंगा ;-)

संपादित करें:

कुछ ऐसा है कि आयु वास्तव में एक वैध तर्क नहीं है, IMO। सवाल हमेशा होना चाहिए: क्या यह मदद करता है, या यह चोट करता है?

ऐसे मामले हैं जब मैरी मदद करती है। आजकल बहुत से नहीं हैं, लेकिन वे अभी भी मौजूद हैं।


30
जितना लिखा जाता है उससे कहीं अधिक बार कोड पढ़ा जाता है। ज़रूर, जब आप कोड लिख रहे हैं तो कंपाइलर आपको एक स्थिरांक पर जाने से रोक देगा। लेकिन उस आदमी के बारे में क्या जिसे अब से दो साल पहले अपना कोड बनाए रखना है? यह सुनिश्चित है कि तुरंत एक निरंतर पहचान करने में सक्षम होना अच्छा है।
ग्रेग हेवगिल

2
आज के IDE संकलन से पहले बहुत सारी समस्याओं को पकड़ते हैं। मुझे नहीं लगता कि नाम से निरंतर पहचानना महत्वपूर्ण है, अन्यथा क्या आपको आसानी से कुछ विशेष नाम भी नहीं मिलेंगे?
मिमीिका

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

7
@ समय: मैं सहमत हूं, अंत में प्रीप्रोसेसर मैक्रोज़ अच्छे से अधिक नुकसान पहुंचाते हैं। मेरे सबसे पसंदीदा पीपी मैक्रो: "#define निजी सार्वजनिक" ;-)
Treb

1
@ समय: C ++ Standard Tempate Library ने स्थिरांक के लिए निम्न मामले को अपनाया है जैसे std :: string :: npos ( cplusplus.com/reference/string/string/npos )। तो ALL_CAPS केवल मैक्रोज़ और प्रीप्रोसेसर निर्देशों के लिए है- जो इसे C # में और भी अधिक बेवकूफ बनाता है।
रिचर्ड डिंगवॉल

16

सबसे पहले, हंगेरियन नोटेशन एक पैरामीटर्स डेटा प्रकार या इच्छित उपयोग को प्रदर्शित करने के लिए एक उपसर्ग का उपयोग करने का अभ्यास है। हंगेरियन नोटेशन के लिए Microsoft के नामकरण संबंधी संकल्‍पनाएं http://en.wikipedia.org/wiki/H परिकल्पना http://msdn.microsoft.com/en-us/library/ms229045.aspx

UPPERCASE का उपयोग करने के लिए प्रोत्साहित नहीं किया जाता है जैसा कि यहाँ कहा गया है: पास्कल केस स्वीकार्य सम्मेलन और स्क्रीनिंग कैप है। http://en.wikibooks.org/wiki/C_Sharp_Programming/Naming

Microsoft यहां यह भी बताता है कि अगर मौजूद योजना से मिलान करने के लिए UPPERCASE का उपयोग किया जा सकता है। http://msdn.microsoft.com/en-us/library/x2dbyw72.aspx

यह काफी हद तक इसका सारांश है।


3
हां, हंगेरियन नोटेशन सभी कैप नहीं है।
स्निबेट्स

13

अपने लेख कॉन्स्टेंट्स (C # प्रोग्रामिंग गाइड) में , Microsoft निम्नलिखित उदाहरण देता है:

class Calendar3
{
    const int months = 12;
    const int weeks = 52;
    const int days = 365;

    const double daysPerWeek = (double) days / (double) weeks;
    const double daysPerMonth = (double) days / (double) months;
}

तो, स्थिरांक के लिए, ऐसा प्रतीत होता है कि Microsoft के उपयोग की सिफारिश कर रहा है camelCasing। लेकिन ध्यान दें कि ये स्थिरांक स्थानीय रूप से परिभाषित हैं ।

यकीनन, बाहरी रूप से दिखने वाले स्थिरांक का नामकरण अधिक रुचि रखता है। व्यवहार में, Microsoft अपने सार्वजनिक स्थिरांक को .NET क्लास लाइब्रेरी में फ़ील्ड के रूप में दस्तावेज़ित करता है । यहाँ कुछ उदाहरण हैं:

पहले दो के उदाहरण हैं PascalCasing। तीसरा Microsoft के कैपिटलाइज़ेशन कन्वेंशन को दो-अक्षर के संक्षिप्तिकरण के लिए प्रतीत होता है (हालाँकि पीआई एक एक्रिनेम नहीं है)। और चौथा यह सुझाव देता है कि दो-अक्षर के नाम के लिए नियम एकल अक्षर के रूप में या पहचानकर्ता E(जो गणितीय निरंतर ई का प्रतिनिधित्व करता है ) तक फैला हुआ है ।

इसके अलावा, अपने कैपिटलाइज़ेशन कन्वेंशन डॉक्यूमेंट में, Microsoft बहुत सीधे तौर पर बताता है कि फील्ड आइडेंटिफ़र्स के नाम से जाना जाना चाहिए PascalCasingऔर MessageQueue.InfiniteTimeout और UInt32.Min के लिए निम्न उदाहरण देता है :

public class MessageQueue
{
    public static readonly TimeSpan InfiniteTimeout;
}

public struct UInt32
{
    public const Min = 0;
}

निष्कर्ष: PascalCasingसार्वजनिक स्थिरांक (जो constया static readonlyफ़ील्ड के रूप में प्रलेखित हैं ) के लिए उपयोग करें

अंत में, जहां तक ​​मुझे पता है, Microsoft निजी पहचानकर्ताओं के लिए विशिष्ट नामकरण या पूंजीकरण सम्मेलनों की वकालत नहीं करता है जैसा कि प्रश्न में प्रस्तुत उदाहरणों में दिखाया गया है।


डेवलपर जिसने उस लेख को लिखा था, वह स्पष्ट रूप से Microsoft द्वारा C # के लिए स्टाइल कन्वेंशन की सिफारिश नहीं कर रहा था।
BrainSlugs83

2
इस उत्तर द्वारा इंगित किया गया लेख बदल गया है। कब्जे अब सार्वजनिक हो गए हैं और पास्कलकेड हो गए हैं। उन दोनों परिवर्तनों को देखते हुए, यह उत्तर देने में मदद नहीं करता है कि क्या निजी स्थिरांक पास्कल कैडेड या कैमल कैडेड होना चाहिए।
19

12

हंगेरियन को हंगरी छोड़ दें।

उदाहरण में, मैं निश्चित लेख छोड़ दूंगा और बस साथ जाऊंगा

private const int Answer = 42;

वह उत्तर है या वह उत्तर है?

* पास्कल के रूप में संपादित करें कड़ाई से सही है, हालांकि मैं सोच रहा था कि सवाल जीवन, ब्रह्मांड और सब कुछ का जवाब मांग रहा था ।


2
इस विशिष्ट मामले में यह है जवाब। लेकिन केवल इसलिए कि मुझे डी.एडम्स पढ़ना बहुत पसंद है।
ट्रेब

हाँ, लेकिन सवाल क्या है? और असुविधा रेखा के लिए मुझे खेद नहीं है;)
कबूतर

2
आह, लेकिन जब से आप पहले से ही जवाब जानते हैं, आप सवाल नहीं जान सकते। वे परस्पर अनन्य हैं। (शर्त आप पहले से ही जानते थे
;;

यह ओपी के सवाल का सही जवाब है। - Theअगर मैं कर सकता था हटाने के लिए मैं आपको दो बार अपवोट करूंगा। :-)
BrainSlugs83

क्या कोई हंगेरियन है, क्या यह उत्तर कहता है कि उन्हें दूसरे सम्मेलन का उपयोग करने की अनुमति है?
कप्तान प्रिंसेस

6

मैं वास्तव में यहाँ PascalCase पसंद करते हैं - लेकिन आदत से बाहर, मैं UPPER_CASE का दोषी हूँ ...


6

ALL_CAPS मेरे विश्वास करने के काम के C और C ++ तरीके से लिया गया है। यह लेख यहां बताता है कि शैली के मतभेद कैसे आए।

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

FxCop और माइक्रोसॉफ्ट StyleCop सॉफ्टवेयर की मदद से आप दिशा निर्देशों देने के लिए और अपने कोड की जांच, ताकि सभी लोग एक ही तरह से काम करता है।

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