जावास्क्रिप्ट नामकरण परंपराओं [बंद]


257

मुझे पता है कि विवाद का एक बहुत कुछ है (शायद विवाद नहीं है, लेकिन कम से कम तर्क) जिसके बारे में नामकरण सम्मेलन जावास्क्रिप्ट के लिए सबसे अच्छा है।

आप अपने चर, कार्यों, वस्तुओं और इस तरह का नाम कैसे देते हैं?

मैं इस पर अपने विचार छोड़ दूंगा, क्योंकि मैं लंबे समय से (केवल कुछ वर्षों के लिए) जेएस नहीं कर रहा हूं, और मुझे काम पर हमारी परियोजनाओं में उपयोग किए जाने वाले नामकरण सम्मेलनों के साथ एक दस्तावेज़ बनाने का अनुरोध मिला है । इसलिए मैं (google-ing) देख रहा हूं, और बहुत सारे अलग-अलग विचार हैं।

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


जेएस में सामान्य ज्ञान नामकरण सम्मेलनों के लिए एक अप-टू-डेट गाइड: robinwieruch.de/javascript-naming-conventions
Robin Wieruch

जवाबों:


202

मैं जावास्क्रिप्ट के लिए डगलस क्रॉकफोर्ड के कोड सम्मेलनों का पालन ​​करता हूं । मैं उन सम्मेलनों का पालन करने के लिए उनके JSLint टूल का उपयोग करता हूं ।


30
JSLint कई डेवलपर्स के लिए भी कट्टरपंथी और प्रतिबंधक हो सकता है , तो JSHint बेहतर विकल्प हो सकता है।
पावेल होडेक

7
क्रॉकफोर्ड विस्तार के इस स्तर पर नहीं जाता है, लेकिन उन चरों के बारे में क्या होता है जो एक बड़े अक्षर से शुरू होते हैं, क्योंकि वे एक परिचित को संदर्भित करते हैं - पहला अक्षर होना चाहिए, या संपूर्ण संक्षिप्त नाम को कम किया जाना चाहिए? उदाहरण: ECBhandleबनाम ecbHandle(इससे कोई फर्क नहीं पड़ता कि ईसीबी का मतलब क्या है)।
डेन डस्केलस्क्यू

13
हालाँकि यह एक अच्छा लिंक है, मैं विश्वास नहीं कर सकता कि "लिंक उत्तर" में बहुत सारे वोट हैं। आप लिंक किए गए पृष्ठ के प्रासंगिक हिस्सों को कम से कम निकाल सकते हैं और प्रारूपित कर सकते हैं।
एड्रिन बी

2
मुझे लगता है कि वह लिंक के साथ ठीक कर रहा है। यदि आप बहुत चिंतित हैं तो आपको पोस्ट को संपादित करना चाहिए।
nckbrz

4
मैं वास्तव में क्रॉकफोर्ड को देखता हूं लेकिन उनके कोड कन्वेंशन बहुत पुराने हैं। मैं @PavelHodek सूची को और नीचे देखने के जवाब की सलाह दूंगा
Per Hornshøj-Schierbeck

160

जैसा कि ज्योफ कहते हैं, क्रॉकफोर्ड जो कहते हैं वह अच्छा है।

एकमात्र अपवाद जो मैं अनुसरण करता हूं (और व्यापक रूप से उपयोग किया गया है) एक jQuery (या जो भी लाइब्रेरी) ऑब्जेक्ट इंगित करने के लिए $ varname का उपयोग करना है। उदाहरण के लिए

var footer = document.getElementById('footer');

var $footer = $('#footer');


7
मैं इसके लिए $ का उपयोग करता हूं। मैं अक्सर देखता हूं कि लोग किसी वस्तु की कैश्ड कॉपी को इंगित करने के लिए $ का उपयोग करते हैं। मैंने हमेशा यह माना कि यह शब्दों पर खेला गया था। कैश> "कैश"> $
शॉन व्हेनरी

1
यदि आप AngularJS का उपयोग कर रहे हैं तो यह सबसे अच्छा विचार नहीं हो सकता है - कोर सेवाओं को '$' के साथ उपसर्ग किया जाता है
फिलिप सोबजैक

2
मैं चर नामों में विशेष वर्णों का उपयोग न करने की अत्यधिक सलाह देता हूं। बहुत सारे ढांचे विशेष रूप से $ का उपयोग करते हैं।
nckbrz

1
@nixxbb यह ठीक है अगर आप वेरिएबल को सही तरीके से स्कोप करते हैं - जो कि सभ्य फ्रेमवर्क भी करते हैं।
आंद्रे फिग्यूएरेडो

1
मैं क्रॉकफोर्ड के गिल्डलाइन का उल्लेख करता हूं "नाम के पहले या अंतिम चरित्र के रूप में _ अंडरबार का उपयोग न करें। यह कभी-कभी गोपनीयता को इंगित करने के लिए अभिप्रेत है"। मैं निजी सदस्यों को इंगित करने के लिए व्यक्तिगत रूप से अंडरबार का उपयोग करता हूं। क्या यह बुरा अभ्यास है? क्या कोई विकल्प है?
इयान जी

112

आप इस Google जावास्क्रिप्ट स्टाइल गाइड का अनुसरण कर सकते हैं

सामान्य तौर पर, functionNamesLikeThis, variableNamesLikeThis, ClassNamesLikeThis, EnumNamesLikeThis, methodNamesLikeThis और SYMBOLIC_CONSTANTSTS_THIS का उपयोग करें।

संपादित करें: जावास्क्रिप्ट स्टाइल गाइड और ब्यूटीफायर का अच्छा संग्रह देखें ।


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

2
मैंने हमेशा Google के निजी नामकरण सम्मेलन को अजीब पाया , इसके बजाय _fooBarवे करते हैं fooBar_- Microsoft ने इसे सही पाया: asp.net/ajaxlibrary/act_contribute_codingStandards.ashx
डैनियल सोकोलोस्की

3
@DanielSokolowski इंटेलीजेंस का उपयोग करते समय क्या होता है? यदि आप अंडरस्कोर के साथ बड़ी संख्या में वैरिएबल उपसर्ग करते हैं, तो यह केवल एक और चरित्र है जो आपको हर बार उन चरों को एक्सेस करने के लिए टाइप करना होगा। इसके साथ अंत में, आपकी अंतर्मुखी सूची साफ दिखती है और जो आपको चाहिए उसे खोजने के लिए बस थोड़ा तेज है।
FreeAsInBeer

@FreeAsInBeer अतिरिक्त चरित्र के बारे में सच है, लेकिन मुझे लगता है कि यह तेजी से नहीं है। _निजी संस्करण संदर्भित करते समय टाइपिंग करने से परिणाम सीमित होते ही अंतर्कलह हो जाएगी; अंत में लगा कि यह व्यक्तिगत प्राथमिकता है।
डैनियल सोकोलोव्स्की

1
स्टाइल गाइड की सूची से जोड़ने के लिए धन्यवाद। मुझे नहीं पता कि क्या कोई विशेष रूप से अनुसरण करने योग्य है या अभी तक कैसे तय किया जाए कि मुझे एक समामेलन का उपयोग करना चाहिए या नहीं। लेकिन यह जानना कि एक जगह में कई ढूंढना एक वास्तविक वरदान है।
रोजर_स

9

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

define(['Lightbox'],function(Lightbox) {
  var myLightbox = new Lightbox() // not sure whether this is a constructor (non-static) or not
  myLightbox.show('hello')
})

मैं एक सम्मलेन की कोशिश करने के बारे में सोच रहा हूँ जहाँ स्थैतिक मॉड्यूल '' '' '' '' का उपयोग उनके पूर्वाग्रह को इंगित करने के लिए करते हैं। क्या इससे बेहतर तरीका किसी ने देखा है? इस तरह दिखेगा:

define(['theLightbox'],function(theLightbox) {
  theLightbox.show('hello') // since I recognize the 'the' convention, I know it's static
})

6

मुझे लगता है कि कुछ सिंटैक्स सीमाओं के अलावा; नामकरण सम्मेलनों तर्क बहुत भाषा स्वतंत्र हैं। मेरा मतलब है, c_style_functions और JavaLikeCamelCase के पक्ष में तर्क समान रूप से अच्छी तरह से उपयोग किए जा सकते हैं, यह सिर्फ भाषा उपयोगकर्ता भाषा लेखकों का अनुसरण करते हैं।

कहा जा रहा है कि, मुझे लगता है कि अधिकांश पुस्तकालय जावा के कैमलकेस के सरलीकरण का अनुसरण करते हैं। मुझे लगता है कि डगलस क्रॉकफोर्ड सलाह मेरे लिए पर्याप्त स्वादिष्ट है।


2

यह एक व्यक्तिगत प्रश्न है जो इस बात पर निर्भर कर सकता है कि आप कैसे काम कर रहे हैं। कुछ लोग वैरिएबल के प्रकार को वैरिएबल के अंतरण पर रखना पसंद करते हैं, जैसे "str_message"। और कुछ लोग अपने शब्दों ("my_message") के बीच अंडरस्कोर का उपयोग करना पसंद करते हैं, जबकि अन्य उन्हें ऊपरी-केस अक्षरों ("myMessage") के साथ अलग करना पसंद करते हैं।

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

संक्षेप में: अंग्रेजी, निम्न-आवरण, सुव्यवस्थित चर और कार्य नाम मेरे अनुसार बेहतर हैं। नामों को छोटा होने के बजाय उनके अस्तित्व का वर्णन करना चाहिए।


2
"इसलिए फ़ंक्शंस और वेरिएबल्स (फ़ंक्शंस के अंदर निजी वेरिएबल्स को छोड़कर) टकराव से बचने के लिए सेवा के नाम के साथ शुरू हुआ," यह कथन गलत है । आप "नामांकित" फ़ंक्शन और ऑब्जेक्ट्स को सही ढंग से रख सकते हैं जो कई जावास्क्रिप्ट फ्रेमवर्क के माध्यम से ब्लीड नहीं करते हैं। MIX11 channel9.msdn.com/Events/MIX/MIX11/OPN08
क्रिस मैरिसिक
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.