क्या कोई जावा विधि परंपराओं का आदेश दे रही है? [बन्द है]


159

मुझे एक बड़ी-ईश क्लास (40 या इतनी विधियाँ) मिली हैं जो एक पैकेज का हिस्सा है जिसे मैं कोर्स-वर्क के रूप में सबमिट करूँगा। वर्तमान में, विधियाँ उपयोगिता सार्वजनिक / निजी आदि के मामले में बहुत अधिक उछली हुई हैं और मैं उन्हें एक समझदार तरीके से आदेश देना चाहता हूं। क्या ऐसा करने का एक मानक तरीका है? जैसे सामान्य तौर पर खेतों को तरीकों से पहले सूचीबद्ध किया जाता है, कंस्ट्रक्टर (ओं) को अन्य तरीकों से पहले सूचीबद्ध किया जाता है, और अंतिम रूप से गेटर्स / सेटर किया जाता है; शेष विधियों के बारे में क्या?


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

यदि आपके पास एक एकल वर्ग में 40 विधियां हैं - तो आप इसे गलत कर रहे हैं
बेन

जवाबों:


132

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

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


1
+1। मैं दृश्यता के आधार पर छांटना पसंद करता हूं। शेम एक्लिप्स यह स्वचालित रूप से नहीं कर सकता है (यह हमेशा सभी कंस्ट्रक्टरों को एक साथ और सभी विधियों को एक साथ
समूहित करेगा

16
@finnw, बग रिपोर्ट दर्ज करें। अजनबी चीजों को वहां से लागू करने के लिए जाना जाता है।
थोरबजोरन रावन एंडरसन

3
@ बान: मेरा अनुभव है कि किसी भी "कभी" के पास अपवाद नहीं होंगे।
जॉन स्कीट

1
@JonSkeet कुछ मामलों में, जहां आदेश देने वाले सम्मेलन अब प्रासंगिक नहीं हैं, उदाहरण के लिए परीक्षण कक्षाएं। खराब कोड को न लिखने से बेहतर सलाह है कि खराब कोड की व्यवस्था कैसे करें।
बेन

1
@ बान: मुझे लगता है कि हम असहमत होने के लिए सहमत होंगे। मैंने कोड लिखा है, जहां बहुत स्वाभाविक रूप से कई सदस्य हैं, बिना किसी चिंता के अलगाव का उल्लंघन करते हुए आदि
जॉन स्कीट

121
  1. वर्ग (स्थिर) चर: पहले सार्वजनिक वर्ग चर, फिर संरक्षित और फिर निजी।

  2. उदाहरण चर: पहले सार्वजनिक, फिर संरक्षित, और फिर निजी।

  3. कंस्ट्रक्टर्स

  4. विधियाँ: इन विधियों को कार्यक्षेत्र द्वारा गुंजाइश या पहुँच के बजाय समूहीकृत किया जाना चाहिए। उदाहरण के लिए, एक निजी वर्ग विधि दो सार्वजनिक उदाहरण विधियों के बीच हो सकती है। लक्ष्य को पढ़ना और समझना आसान है।

स्रोत: http://www.oracle.com/technetwork/java/codeconventions-141855.html


4
यह 15 साल पुराना है और आधुनिक IDEs की उपस्थिति के साथ थोड़ा पुराना है ...
assylias

16
@assylias: IMO, पठनीयता IDE से स्वतंत्र है। निजी से पहले सार्वजनिक रखना आमतौर पर बेहतर होता है।
२१

40

«कोड सम्मेलनों»: «वर्ग और इंटरफ़ेस घोषणाओं» के लिए अधिक सटीक लिंक


8
+1, afaik - यह केवल एक ही पोस्ट है जो वास्तव में प्रश्न का उत्तर देता है। हाँ, ओरेकल और सन द्वारा निर्धारित के रूप में एक मानक आदेश है: 1. सार्वजनिक टिप्पणी, 2. वर्ग, 3. आंतरिक टिप्पणी, 4. स्थिर डेटा, 5. उदाहरण डेटा, 6. सेटर, 7. तरीके, और प्रत्येक अनुभाग समूह के भीतर तार्किक रूप से, पहुँच द्वारा नहीं।
जॉन हेन्केल

@VadimKirilchuk «इंटरनेट आर्काइव» नीचे था ...
टिमोफ़े गोर्शकोव


15

यकीन नहीं है कि अगर सार्वभौमिक रूप से स्वीकृत मानक है लेकिन मेरी अपनी प्राथमिकताएं हैं;

  • कंस्ट्रक्टर पहले
  • स्थैतिक विधियाँ अगले, यदि कोई मुख्य विधि है, हमेशा अन्य स्थैतिक विधियों से पहले
  • गैर-स्थैतिक विधियाँ, आमतौर पर विधि के महत्व के क्रम में, इसके बाद किसी भी विधि से जिसे यह कहते हैं। इसका मतलब यह है कि अन्य तरीकों को कॉल करने वाले सार्वजनिक तरीके शीर्ष और निजी तरीकों की ओर दिखाई देते हैं, जो अन्य तरीकों को नहीं कहते हैं, आमतौर पर नीचे की ओर समाप्त होते हैं
  • मानक तरीके जैसे toString, equalsऔर hashcodeअगला
  • गेटर्स और सेटर्स को क्लास के निचले भाग में एक विशेष स्थान आरक्षित है

मैं वास्तव में पिछले निर्माताओं को पसंद करता हूं क्योंकि एक उचित रूप से लिखे गए निर्माता को गुणों के लिए अपने तर्क को सौंपने के अलावा बहुत कम करना चाहिए।
गॉर्डन

@GordonM आपको ऐसा क्यों लगता है? मैं जहां तक ​​तर्क करना चाहूंगा, उलटा सच है। आपको हमेशा अपनी कक्षाओं के लिए सबसे स्वच्छ एपीआई के बारे में सोचना चाहिए। और यह अक्सर वे जिस तरह से संग्रहीत नहीं होते हैं, इसलिए मैं अक्सर इस बोझ से कॉल करने वाले को राहत देने के लिए काफी प्रसंस्करण करता हूं
न्यूरॉन

@GordonM मैं साइड इफेक्ट्स के बारे में बात नहीं कर रहा हूं। तो उन सूचियों में कोई बदलाव नहीं किया गया है जो पारित की गई थीं या कुछ भी समान थीं। बस पासिंग और वैल्यू सेट करने के लिए यह आवश्यक है कि क्लास आपको इसके कार्यान्वयन के बारे में बहुत कुछ बताए, जो कि नहीं होना चाहिए
न्यूरॉन

@ लोनली नाइट्रॉन यह सुनिश्चित नहीं है कि आप यहां क्या कह रहे हैं, लेकिन ऐसा लगता है कि आप कह रहे हैं कि कंस्ट्रक्टर को अपने तर्क को आंतरिक स्थिति में निर्दिष्ट करने के अलावा बहुत सारे सेटअप कार्य करने चाहिए। यह निश्चित रूप से गलत है, क्योंकि इसका मतलब है कि चीजें "जादू" से हो रही हैं। एक कॉल का new Thing()परिणाम केवल एक नई बात पर त्वरित होना चाहिए। यह डेटाबेस कनेक्शनों को खोले जाने, फाइलों के लिखे जाने आदि के परिणामस्वरूप नहीं होना चाहिए
गॉर्डन एमआर

@LonelyNeuron एक निर्माता में निर्भरता होने के कारण आपको क्लास के कार्यान्वयन के बारे में कुछ भी नहीं बताता है कि उसकी निर्भरताएं क्या हैं। यह अच्छी बात है, बुरी बात नहीं।
गॉर्डन

12

एक एकल वर्ग में 40 विधियां थोड़ी ज्यादा हैं।

क्या यह कार्यक्षमता को अन्य - उपयुक्त रूप से नामित वर्गों में स्थानांतरित करने के लिए समझ में आएगा। तब समझ बनाना बहुत आसान है।

जब आपके पास कम होता है, तो उन्हें प्राकृतिक पढ़ने के क्रम में सूचीबद्ध करना बहुत आसान होता है। एक क्रमिक प्रतिमान चीजों को सूचीबद्ध करने से पहले या बाद में आपको उनकी आवश्यकता होती है, जिस क्रम में आपको उनकी आवश्यकता होती है।

इसका आमतौर पर मतलब है कि main()ऊपर या नीचे चला जाता है।


1
ठीक है - यह एक आदेश जारी नहीं है
kostja

4
आपके पास हमेशा एक विकल्प नहीं होता है, उदाहरण के लिए यदि आप बहुत सारे तरीकों के साथ इंटरफ़ेस लागू कर रहे हैं।
फिन जेएन

5
यह एक एंड्रॉइड गतिविधि है, इसलिए बहुत सारे हैं जो बस कहीं और नहीं जा सकते हैं onPause(), onResume()आदि, साथ ही साथ मेरे सभी OnClickListenerक्षेत्र, जो, हालांकि वे क्षेत्र हैं, उनके जैसे नहीं दिखते या व्यवहार नहीं करते हैं, इसलिए यह समझदार है उन्हें अलग से सूचीबद्ध करें।
फ्रेडली

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

11

मेरा "सम्मेलन": उदाहरण से पहले स्थिर, निजी से पहले सार्वजनिक, विधियों से पहले निर्माता, लेकिन तल पर मुख्य विधि (यदि मौजूद है)।


2

इसके अलावा, ग्रहण आपके लिए वर्ग के सदस्यों को क्रमबद्ध करने की संभावना प्रदान करता है, यदि आप किसी कारण से उन्हें मिलाते हैं:

अपनी कक्षा फ़ाइल खोलें, मुख्य मेनू में "स्रोत" पर जाएं और "सॉर्ट सदस्य" चुनें।

यहाँ से लिया गया: ग्रहण में छँटाई के तरीके


1

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

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