Go, CamelCase या Semi-CamelCase में किसी फ़ंक्शन का नाम देने का कौन सा तरीका है?


80

मैं एक समारोह में लिखना चाहता हूं कि एक दस्तावेज़ में एक संग्रह में एक MongoDB डेटाबेस में सम्मिलित करें। फंक्शन को नाम देने का कौन सा तरीका बेहतर है,

  • writeToMongoDB या
  • WriteToMongoD?

दूसरा कैमलकेज़ है, जबकि मैंने किसी को पहली वाली शैली का उपयोग करते हुए देखा था, इसलिए मुझे यकीन नहीं है कि कौन सा अधिक उपयुक्त है। धन्यवाद।


2
उनके अलग-अलग उपयोग हैं: golang.org/ref/spec#Exported_identifiers
जिमबी जूल

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

यह सही है, अगर फ़ाइल ए के पैकेज का नाम है packageA, फ़ाइल बी का उपयोग करके फ़ंक्शन तक पहुंच सकता है packageA.WriteToMongoD(एक क्वालीफायर के रूप में आवश्यक पैकेजए)।
तन्मय गर्ग

जवाबों:


116

वाक्य - विन्यास

गो में यह शैली का मामला नहीं है, यह वाक्य रचना का विषय है।

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

WriteToDB

लेकिन अगर यह एक आंतरिक सहायक विधि है तो इसे लिखा जाना चाहिए:

writeToDB

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

इन्हें भी देखें: कल्पना से निर्यात किए गए पहचानकर्ता

i18n

क्योंकि गो, UTF-8 एनकोडेड है और पहचानकर्ता नाम के अक्षरों या संख्याओं के साथ किसी भी यूनिकोड वर्ण का समर्थन करता है, ऐसे लोगों में कुछ ऐसे लोग हैं जिन्हें मामले की अवधारणा नहीं है, निर्यात किए गए तरीकों को बनाने में परेशानी हो सकती है (डिफ़ॉल्ट गैर-निर्यात है)। इस मामले में (सज़ा का इरादा) यह एक्सपाइरीनेस Xको इंगित करने के लिए एक पहचानकर्ता के साथ उपसर्ग करने के लिए आम है । उदाहरण के लिए:X日本語

यह भी देखें: यूनिकोड पहचानकर्ताओं के साथ क्या हो रहा है? एफएक्यू से।

अंदाज

जहाँ तक सामान्य शैली की बात है, यह हमेशा ऊँट-केस (पहले अक्षर को छोड़कर, जैसा कि पहले बताया गया है) का उपयोग करना है। इसमें स्थिरांक, कार्य और अन्य पहचानकर्ता शामिल हैं। उदाहरण के लिए (निर्यात) स्थिरांक की एक सूची की तरह लग सकता है:

const (
    StateConnected = iota
    StateError
    StateDone

    internalStateMask = 0x2 
)

इसके अलावा, संक्षिप्ताक्षर हमेशा एक ही मामले के साथ लिखे जाते हैं, इसलिए आप निम्नलिखित में से एक लिखेंगे:

dbWrite
writeDB

के बजाय writeDbया DbWrite


शानदार जवाब +1। पसंदीदा गो शब्द मिश्रितकैप्स है या मिश्रित कैप्सेज़ नहीं है। Golang.org/doc/effective_go.html#mixed-caps देखें ।
टॉम एल

28

गो में, मिश्रित टोपी का उपयोग करने के लिए यह सम्मेलन है। डॉक्स से: https://golang.org/doc/effective_go.html#mixed-caps

अंत में, गो में अधिवेशन मल्टीकार्ड नाम लिखने के लिए अंडरस्कोर के बजाय मिश्रितकैप्स या मिक्सकैप्स का उपयोग करना है।

ध्यान दें कि कैपिटल लेटर से शुरू होने वाले फ़ाइल स्तर के नाम पैकेज स्तर पर निर्यात किए जाते हैं: https://golang.org/doc/effective_go.html#etetters

साथ ही, सभी कैपों पर शब्दकोष लिखने के लिए यह सम्मेलन है। तो नीचे ठीक है:

writeToMongoDB // unexported, only visible within the package

या

WriteToMongoDB // exported

और नहीं:

writeToMongoDb

सिर्फ गोलंग सीखना और दिनों के लिए इस पर अटक गया था। अंत में इसे हल किया!
20 अक्टूबर को AzyCrw4282

18

नाम

नाम गो में किसी अन्य भाषा की तरह महत्वपूर्ण हैं। यहां तक ​​कि उनके शब्दार्थ प्रभाव भी हैं: एक पैकेज के बाहर एक नाम की दृश्यता यह निर्धारित करती है कि इसका पहला चरित्र ऊपरी मामला है या नहीं । इसलिए यह गो कार्यक्रमों में नामकरण सम्मेलनों के बारे में बात करने में थोड़ा समय बिताने के लायक है।

पैकेज के नाम

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

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

एक और सम्मेलन यह है कि पैकेज का नाम उसके स्रोत निर्देशिका का आधार नाम है; src / एन्कोडिंग / बेस 64 में पैकेज "एन्कोडिंग / बेस 64" के रूप में आयात किया गया है, लेकिन इसका नाम बेस 64 है, एन्कोडिंग_बेस 2 नहीं और एन्कोडिंगबेस नहीं है।

पैकेज का आयातक अपनी सामग्री को संदर्भित करने के लिए नाम का उपयोग करेगा, इसलिए पैकेज में निर्यात किए गए नाम हकलाने से बचने के लिए उस तथ्य का उपयोग कर सकते हैं। (आयात संकेतन का उपयोग न करें, जो उन परीक्षणों को सरल बना सकता है जो उन्हें परीक्षण कर रहे पैकेज के बाहर चलने चाहिए, लेकिन अन्यथा से बचना चाहिए।) उदाहरण के लिए, bufio पैकेज में बफ़र किए गए रीडर प्रकार को रीडर कहा जाता है, ब्यूफ्रेडर नहीं, क्योंकि। उपयोगकर्ता इसे bufio.Reader के रूप में देखते हैं, जो एक स्पष्ट, संक्षिप्त नाम है। इसके अलावा, क्योंकि आयातित इकाइयाँ हमेशा अपने पैकेज के नाम के साथ संबोधित की जाती हैं, bufio.Reader io.Reader के साथ संघर्ष नहीं करती है। इसी तरह, रिंग के नए इंस्टेंसेस बनाने का कार्य। गोइंग में एक रचनाकार की परिभाषा है- आमतौर पर न्यूरिंग कहा जाएगा, लेकिन चूंकि रिंग पैकेज द्वारा निर्यात किया जाने वाला एकमात्र प्रकार है, और चूंकि पैकेज को रिंग कहा जाता है, यह ' सिर्फ न्यू कहा जाता है, जो पैकेज के क्लाइंट रिंग के रूप में देखते हैं। अच्छे नामों को चुनने में मदद करने के लिए पैकेज संरचना का उपयोग करें।

एक और छोटा उदाहरण एक बार है। एक बार.डॉ (सेटअप) अच्छी तरह से पढ़ता है और एक बार लिखने से सुधार नहीं होगा। लंबे नाम स्वचालित रूप से चीजों को अधिक पठनीय नहीं बनाते हैं। एक सहायक डॉक्टर टिप्पणी अक्सर एक अतिरिक्त लंबे नाम से अधिक मूल्यवान हो सकती है

टिककर खेल

गो गेटर्स और सेटर के लिए ऑटोमैटिक सपोर्ट नहीं देता है। गेटर्स प्रदान करने में कुछ भी गलत नहीं है और खुद को व्यवस्थित करता है, और ऐसा करने के लिए अक्सर उपयुक्त होता है, लेकिन गेटर के नाम में गेट लगाने के लिए यह न तो मुहावरेदार है और न ही आवश्यक है। यदि आपके पास एक फ़ील्ड है जिसे मालिक कहा जाता है (निचला मामला, अस्पष्टीकृत), तो गेटर विधि को मालिक (ऊपरी मामला, निर्यात) कहा जाना चाहिए, गेटऑनर नहीं । निर्यात के लिए ऊपरी-मामले के नामों का उपयोग विधि को क्षेत्र से भेदभाव करने के लिए हुक प्रदान करता है। एक सेटर फ़ंक्शन, यदि आवश्यक हो, तो संभवतः सेटऑनर कहा जाएगा । दोनों नाम व्यवहार में अच्छी तरह से पढ़े:

owner := obj.Owner()
if owner != user {
    obj.SetOwner(user)
}

इंटरफ़ेस नाम

कन्वेंशन द्वारा, एक विधि-संज्ञा के नाम से एक-विधि इंटरफेस का नाम दिया जाता है और एजेंट संज्ञा का निर्माण करने के लिए इसी तरह के संशोधन: रीडर, राइटर, फॉर्मेटर, क्लोज़नोटिफायर आदि

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

मिश्रित कर दिया

अंत में, गो में अधिवेशन मल्टीकार्ड नाम लिखने के लिए अंडरस्कोर के बजाय मिश्रितकैप्स या मिक्सकैप्स का उपयोग करना है

रेफरी: प्रभावी जाओ


12

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

यदि आप किसी अन्य पैकेज में चर (या फ़ंक्शन) का उपयोग करने का इरादा रखते हैं या आप सुरक्षित रूप से कैमलकेस के साथ चिपक सकते हैं, तो आपको कैमलकेज़ का उपयोग करना चाहिए।


1
शानदार जवाब +1। पसंदीदा गो शब्द मिश्रितकैप्स है या मिश्रित कैप्सेज़ नहीं है। Golang.org/doc/effective_go.html#mixed-caps देखें ।
टॉम एल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.