सार्थक संक्षिप्त विधि नामकरण दिशा-निर्देश


25

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

मैं नामकरण के बारे में कुछ दिशानिर्देशों के बारे में सोच रहा था, मुझे बहुत सारे दिशानिर्देशों के बारे में पता है जो केवल पत्र आवरण या कुछ सरल नोटों के बारे में परवाह करते हैं। यहाँ, मैं सार्थक लेकिन अभी तक संक्षिप्त नामकरण के दिशानिर्देशों की देखभाल कर रहा हूँ।

उदाहरण के लिए, यह उन दिशानिर्देशों का हिस्सा हो सकता है जिन्हें मैं देख रहा हूं:

  • जब कोई मौजूदा आइटम किसी लक्ष्य में जोड़ा जा रहा हो, तो ऐड का उपयोग करें, तब बनाएं, जब कोई नया आइटम बनाया जा रहा हो और लक्ष्य में जोड़ा गया हो तो उपयोग करें।
  • जब मौजूदा आइटम को किसी लक्ष्य से हटाया जा रहा हो, तो निकालें का उपयोग करें, जब आइटम को स्थायी रूप से हटाया जा रहा हो तो हटाएँ का उपयोग करें।
  • AddXXX के साथ जोड़ी AddXXX विधियाँ और DeleteXXX विधियों के साथ जोड़ी CreateXXX विधियाँ, लेकिन उन्हें मिलाएं नहीं।

जैसा कि ऊपर के नमूने दिखाते हैं, मैं कुछ ऑनलाइन सामग्री को नामकरण के तरीकों और अंग्रेजी व्याकरण और शब्द अर्थ के अनुपालन के साथ मेरी मदद करना चाहूंगा।

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


साइट पर आपका स्वागत है! आपको यह संबंधित प्रश्न मददगार लग सकते हैं: प्रोग्रामर.स्टैकएक्सचेंज.
एडम लेयर

1
मुझे लगता है कि संक्षिप्त भाग सार्थक भाग से अधिक महत्वपूर्ण है, क्योंकि आपकी योजना पहले से ही सार्थक है। यदि आप अतिरिक्त मील जाने वाले हैं, तो इसे स्थिरता के लिए करें।
यानिस

7
वर्णनात्मक संक्षिप्त से अधिक महत्वपूर्ण है। अधिकांश आईडीई की पेशकश पूरी हो रही है, इसलिए लंबाई एक बाधा नहीं होनी चाहिए, और वर्णनात्मक नाम समझने और याद रखने में आसान हैं।
कालेब

@AnnaLear मैं कुछ अलग पूछ रहा हूं, मेरा सवाल नामकरण या व्याकरण नोट्स के लिए सुझाई गई शब्दावली जैसी चीजों से संबंधित है जो दूसरों को विधि के उद्देश्य को बेहतर तरीके से समझने में मदद कर सकते हैं।
०००

3
पढ़ने योग्य संक्षिप्त से अधिक महत्वपूर्ण है। सभी आधुनिक आईडीई में कोड पूरा करने की सुविधा है, इसलिए यह पता लगाना आसान है कि कोई विधि क्या करती है यह टाइप करने के लिए आसान बनाने की तुलना में अधिक मूल्यवान है।

जवाबों:


34

नामकरण। सॉफ्टवेयर विकास के बारे में सबसे कठिन चीजों में से एक :)

जब मैं कुछ नाम देता हूं, तो यहां मेरी प्राथमिकताएं हैं:

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

जाहिर है कि यह एक सरलीकृत दृष्टिकोण है। नामकरण की बारी है।

आगे के शोध के लिए, मैं द आर्ट ऑफ रीडेबल कोड को पढ़ने की सलाह दूंगा , क्योंकि यह विधि के नामकरण के बारे में कुछ उत्कृष्ट, संक्षिप्त सलाह प्रदान करता है। और भी अधिक शोध के लिए मैं बॉब मार्टिन के क्लीन कोड की अधिक अनुशंसा नहीं कर सकता


2
अच्छे उत्तर के लिए +1 और क्लीन कोड की सिफारिश करना। मैं इस पुस्तक की भी अत्यधिक अनुशंसा करता हूं। एक और चीज़ जो मैं जोड़ूंगा, और यह मार्टिन की पुस्तक से है: "मैं कोड को आसानी से लिखना चाहता हूं" कोड पढ़ने में सक्षम होने की तुलना में बहुत कम प्राथमिकता है। जाहिर है, एक नाम के रूप में ऐसी बात है जो बहुत लंबी है, लेकिन मैं हमेशा उन लोगों की तुलना में अधिक पठनीय लंबे नामों की ओर झुकूंगा, जो लिखना आसान है। इसके अलावा सबसे आधुनिक आईडीई के ऑटो-पूर्ण वैसे भी हैं।
DXM

3
रॉबर्ट मार्टिन की पुस्तक से एक और महत्वपूर्ण विचार: तरीकों के लिए - लंबा गुंजाइश छोटा नाम, लघु गुंजाइश लंबा नाम। चरों के लिए रिवर्स - शॉर्ट स्कोप शॉर्ट नेम, लॉन्ग स्कोप लॉन्ग नेम।
पेटकोस सेबा

"क्लीन कोड" सबसे बड़ी पुस्तक थी जिसने मुझे कोड पठनीयता के प्रभाव को समझने में मदद की और नियमित रूप से मेरे द्वारा पालन की जाने वाली सर्वोत्तम प्रथाओं को सूचीबद्ध किया
पॉल

एक प्रश्न, विधि के नाम में आशय प्रकट करना, क्या यह विधि पुन: प्रयोज्य को प्रभावित नहीं करता है? post_twitter_status इसे बहुत विशिष्ट बनाता है।
एरडेदेव

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

7

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

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

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


6

मेरे लिए, किसी चीज के लिए एक अच्छा नाम ढूंढना हमेशा एक ऐसी वस्तु के रूप में सोचता है, जिसे अपने अस्तित्व का औचित्य साबित करना है। अपने आप से पूछो:

  • वर्ग / विधि / चर क्या करता है, अर्थात इसका व्यापक उद्देश्य क्या है और यह किसके लिए है?
  • विशेष रूप से इसके उद्देश्य के बारे में क्या यह संवाद करने की आवश्यकता है, यानी यह आवश्यक हिस्सा क्या है कि नाम इसमें होना चाहिए?

ज्यादातर डेवलपर्स सहमत होंगे कि नामकरण की बात आने पर पठनीयता हमेशा महत्वपूर्ण होती है। कोड न लिखें, ताकि आप जान सकें कि आप इसे लिखते समय क्या मतलब रखते हैं, इसे लिखें, ताकि भविष्य में किसी बिंदु पर पहली बार कोड को देखने वाला कोई व्यक्ति जानता हो कि आपके पास बहुत ज्यादा सोचने के बिना क्या मतलब है। आप कोड को केवल एक बार लिखेंगे, लेकिन अपने जीवनकाल के दौरान यह सबसे अधिक बार संपादित किया जाना होगा और इससे भी अधिक बार पढ़ा जाएगा।

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

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

public boolean shouldConsiderAbbreviating(List<String> someNames) {
  for (String eachName : someNames) {
    if (isTooLong(eachName)) {
      return true;
    }
  }
  return false;
}

यह कुछ इस तरह से जावा के ज्ञान के एक बिट के साथ लोगों के लिए पठनीय होना चाहिए:

यह निर्धारित करने के लिए कि क्या आपको कुछ नामों की सूची पर विचार करना चाहिए (जो तार हैं), कुछ नामों पर पुनरावृति, और प्रत्येक नाम के लिए, यह निर्धारित करें कि क्या यह बहुत लंबा है; यदि ऐसा है, तो वापस लौटें true; यदि कोई बहुत लंबा नहीं है, तो वापस लौटें false

उपर्युक्त कोड का विरोध केवल तर्क stringsऔर पाश चर के नामकरण के साथ करें string, विशेष रूप से अधिक जटिल विधि में। नाम पर एक नज़र से उपयोग स्पष्ट होने के बजाय आपको अंतर देखना होगा।


3

एक अच्छा नामकरण हमेशा अधिक कारकों के बीच एक समझौता है। आप कभी भी पूरी तरह से संतुष्ट नहीं होंगे।

उस ने कहा, भले ही आपकी मूल भाषा इस तरह न हो, पर विचार करें कि अंग्रेजी वह भाषा है जिसकी प्रोग्रामिंग भाषाएं टोकन बनती हैं। अंग्रेजी-जैसे सिंटैक्स का उपयोग करने से कोड पढ़ना अधिक "धाराप्रवाह" हो जाता है क्योंकि कोई कीवर्ड नहीं मिलने पर "ब्रेकिंग रीडिंग रूल्स" हर बार होते हैं।

सामान्य तौर पर, object.method(parameters)एक योजना की तरह चीजों पर विचार करें subject.verb(complements)

मुख्य बिंदु, यदि आपको जेनेरिक प्रोग्रामिंग का समर्थन करना है, तो "क्रियाओं" का एक अच्छा और सुसंगत सेट चुनें (विशेषकर वे जो जेनेरिक एल्गोरिदम में उपयोग किए जाने की आवश्यकता है)।

संज्ञाओं के बारे में, वर्गों को उनके नाम are(अवधारणा की अवधि में) के लिए नामित किया जाना चाहिए , जबकि वे क्या करते हैं are for

उस ने कहा, बीच list.add(component)और component.add_to(list)पहले पसंद करते हैं। सामान्य रूप से "सक्रिय सकर्मक" क्रिया अपने निष्क्रिय या प्रतिपक्षीय समकक्षों के संबंध में क्रियाओं का बेहतर प्रतिनिधित्व करती है। जब तक कि डिजाइन की कमी आपको नाकाम न कर दे।


2

विधि नामों की लंबाई के बारे में चिंता न करें। सुनिश्चित करें कि विधि के नाम स्पष्ट रूप से दर्शाते हैं कि वे क्या कर रहे हैं। यह किसी और चीज के लिए सर्वोपरि है। यदि आपको लगता है कि विधि का नाम बहुत लंबा है, तो थिसॉरस का उपयोग करके एक छोटा शब्द खोजें, जिसका अर्थ एक ही है। उदाहरण के लिए के Findबजाय का उपयोग करें Retrieve

इसके अलावा जो सिर्फ उतना ही महत्वपूर्ण है, वह नाम जो आप अपनी कक्षाओं के लिए चुनते हैं। विधि के नामों को देखते समय ये बहुत सारे संदर्भ प्रदान करते हैं। एक विधि हस्ताक्षर जैसे:

public User Find(int userId);

से समझने में आसान है:

public Person Find(int personId);

क्योंकि वर्ग के नाम से प्राप्त संदर्भ Userप्रोग्रामर को बताता है जो Find()एक विशिष्ट प्रकार के व्यक्ति, आपके सिस्टम के उपयोगकर्ता का पता लगाने के लिए है। वह संस्करण जो Personकक्षा का उपयोग करता है, आपको इस बारे में कोई संदर्भ नहीं देता है कि आपको पहले स्थान पर विधि का उपयोग करने की आवश्यकता क्यों होगी।


1

अपने प्लेटफ़ॉर्म पर अन्य लोग इसे कैसे देखते हैं - कुछ बड़े खिलाड़ियों के पास कोड स्टाइल और नामकरण दिशानिर्देश भी हो सकते हैं।

कुछ प्लेटफ़ॉर्म संक्षिप्त नाम पसंद करते हैं (उदाहरण के लिए, Win32 C API _tcsstrमें स्ट्रिंग के भीतर एक स्ट्रिंग खोजने का कार्य है - क्या यह स्पष्ट नहीं है?), अन्य लोग संक्षिप्तता के पक्ष में पठनीयता के लिए जाते हैं (ऑब्जेक्टिव-सी के लिए Apple के कोको फ्रेमवर्क में) (स्ट्रिंग में एक स्ट्रिंग को दूसरे स्ट्रिंग के साथ बदलने के लिए और एक प्रति के रूप में परिणाम को वापस करने के लिए विधि कहा जाता है stringByReplacingOccurrencesOfString: withString:)। मुझे बाद में समझने में बहुत आसानी होती है, और केवल लिखने के लिए मध्यम रूप से कठिन होता है (विशेषकर कोड पूरा होने के साथ)।

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


1
  1. अंग्रेजी मान लें, जब तक कि हर डेवलपर जो कभी भी इस कोड पर काम करता है, वही गैर-अंग्रेजी भाषा बोलेगा।

  2. आमतौर पर स्वीकृत नामकरण परंपराओं और शैलियों का अध्ययन करें आपका मार्गदर्शक सिद्धांत स्पष्टता होना चाहिए। प्रोग्रामिंग भाषा से शैलियाँ भिन्न होती हैं।

  3. ऐसा कुछ भी नहीं है जो आप नामकरण के साथ कर सकते हैं जिससे आपके कोड में विभिन्न वस्तुओं के बीच संबंधों को समझना आसान हो जाएगा। उसके लिए, आपको अभी भी अच्छी तरह से लिखित टिप्पणियों और प्रलेखन की आवश्यकता है।


यहां तक ​​कि अगर हर डेवलपर जो कभी कोड पर काम करता है, वह गैर-अंग्रेजी बोलेंगे, तब भी अंग्रेजी का उपयोग करेंगे ...!
संशोधन

0
  1. उपसर्ग का उपयोग करें। यदि विधियों का एक गुच्छा कुछ समान करने के लिए उपयोग किया जाता है या किसी तरह से एक साथ समूहीकृत किया जा सकता है, तो इन तरीकों को सामान्य रूप में दिखाने के लिए उनके नामों से पहले एक सामान्य उपसर्ग लगाएं।
  2. यदि आप दूसरों को तुरंत नामों को समझना चाहते हैं तो अस्पष्ट संक्षिप्त नाम का उपयोग न करें (एपीआई नामकरण में महत्वपूर्ण)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.