जावा में "अच्छी शैली" के लिए क्या करता है? [बन्द है]


9

मैंने स्टाकेवरफ्लो पर यह सवाल पूछा था, और इससे पहले कि यह उबल पड़े, मुझे Péter Török से उपयोगी सुझाव मिला कि यह इसे पोस्ट करने के लिए एक बेहतर जगह हो सकती है।

मैं कुछ वर्षों से जावा में प्रोग्रामिंग कर रहा हूं। मैंने अक्सर 'अच्छी शैली' का गठन करने के आधार पर सहकर्मियों के साथ डिज़ाइन निर्णयों पर चर्चा की है। वास्तव में, कई स्टैकऑवरफ्लो प्रश्न / उत्तर हैं जो इस आधार पर एक डिजाइन पर चर्चा करते हैं कि क्या कुछ 'अच्छी शैली' है।

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

अच्छी, अच्छी तरह से डिज़ाइन किए गए कोड का उत्पादन करने के लिए आप किन चीजों के बारे में सोचते हैं?

(मैं स्वीकार करता हूं कि यह कुछ व्यक्तिपरक है, क्योंकि जो 'अच्छी शैली' है वह हाथ में काम पर निर्भर करेगा)। (इसके अलावा, मुझे यह जोड़ना चाहिए कि मुझे टीम शैलियों में कोई दिलचस्पी नहीं है - उदाहरण के लिए "हम 4 के बजाय 2 रिक्त स्थान के इंडेंट का उपयोग करते हैं ..., और मुझे जावा कोड सम्मेलनों में कोई दिलचस्पी नहीं है।"

संपादित करें: अब तक के सभी अच्छे उत्तरों / टिप्पणियों के लिए धन्यवाद। मैं विशेष रूप से उन उत्तरों के लिए उत्सुक हूं जो उन चीजों को संहिताबद्ध करने में मदद करेंगे जो प्रोग्रामर का विवेक (और संभवतः पेट) रिंच बनाते हैं?


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

1
@ ब्रायन, अपना कोड बताएं कि कैसे । व्याख्या करने के लिए वास्तविक टिप्पणियों को छोड़ दें कि क्यों । दूसरे शब्दों में, पागल की तरह टिप्पणी न करें (सामान्य स्थिति में)

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

1
@ ब्रायन: आपका अंतिम कथन यह सब कहता है। कोड पठनीय होना चाहिए। टिप्पणियाँ बासी हो जाती हैं। कोड कभी नहीं करता है। यदि आपको टिप्पणियों की आवश्यकता महसूस होती है, तो कोड तक रिफ्लेक्टर तब तक स्पष्ट रहेगा जब तक कि कोड क्या कहता है, टिप्पणियां दोहराई जाएंगी। एकमात्र अच्छी टिप्पणी वह है जो कहती है कि कोड एक विशेष तरीके से काम क्यों करता है - जैसे कि थर्ड पार्टी लाइब्रेरी में बग से बचने के लिए - ताकि कोई वापस न जाए और इसे किसी ऐसी चीज़ में बदल दे जो किसी कारण से काम नहीं करेगी। यह तुरंत स्पष्ट नहीं है।
रयान स्टीवर्ट

2
मैं आधिकारिक तौर पर विनम्र हो गया हूं। क्षमा करें @amaidment। मुझे लगता है कि जब टिप्पणियों की बात आती है तो अच्छे कोडिंग मानकों पर शोध करने की आवश्यकता होती है।
ब्रायन

जवाबों:


17

कुछ संक्षिप्त बिंदु:


3
+1। शायद सबसे महत्वपूर्ण: डुप्लिकेट कोड को कम से कम करें। यदि आप कुछ टोकन से अधिक काटने और पेस्ट करने के लिए लुभाए जाते हैं, तो आपको एक फ़ंक्शन निकालने की आवश्यकता है। भले ही फ़ंक्शन कोड की एक एकल पंक्ति है।
केविन क्लाइन

4
डुप्लिकेट किए गए कोड पर, मैं निम्नलिखित रुख लेता हूं। कट और पेस्ट = ठीक है। यह सिर्फ मूविंग कोड है (यह मानते हुए कि आप एक बार पेस्ट का उपयोग करते हैं)। कॉपी और पेस्ट करना = भयानक। यदि आप अपनी शब्दावली से केवल कॉपी बटन को हटाते हैं, तो आप सही काम करने की अधिक संभावना रखते हैं।
jsternberg

@jsternberg: +1 कट / कॉपी डिस्टिंक्शन के लिए, लेकिन मैं नोटिस करता हूं कि बहुत सारे लोग "कट / पेस्ट" कहते हैं जब उनका मतलब "कॉपी / पेस्ट" होता है। मुझे नहीं पता कि भेद कैसे खो गया।
रयान स्टीवर्ट

5
खुद को दोहराना नहीं है। खुद को दोहराना नहीं है। खुद को दोहराना नहीं है।
विन्यासकर्ता

1
@configurator, आपको थोड़ी अजीब गंध

9

रयान की सूची में जोड़ना:

  • ठोस सिद्धांतों का पालन करें
  • सुनिश्चित करें कि आपके कोड में बहुत अधिक चक्रीय जटिलता नहीं है
  • टेस्ट ड्रिवेन जावा हमेशा एक अच्छी चीज है
  • यदि आपके पास एक xFactoryFactoryवर्ग है, तो आप इसे गलत कर रहे हैं :-)
  • जावा पारिस्थितिकी तंत्र में खुले स्रोत पुस्तकालयों को देखते हुए, पहिया का फिर से आविष्कार करना खराब शैली है
  • तिथि और समय के लिए जोडा समय का उपयोग करें

मैं वहीं रुक जाऊंगा।


2
लेकिन HammerFactoryFactoryFactoryकक्षा के बारे में क्या ? ;-)
वेन मोलिना

@Wayne, Factories एक संकेत है कि कुछ निर्णयों में देरी की आवश्यकता है, और FactoryFactoryFactories इंगित करते हैं कि एक निर्णय है जो वास्तव में रनटाइम पर किए जाने की आवश्यकता है लेकिन नहीं कर सकता।

मुझे पता है, मैं व्यंग्यात्मक था और उस लेख के बारे में संदर्भित कर रहा था कि तब क्यों-जे 2 ईई अत्यधिक जटिल था, हैमरफैक्टरीज और हैमरफैक्टरीफैक्टरीज के साथ और मुझे लगता है कि हैमरफैक्टरीफैक्ट्रीफैक्टरीज। :)
वेन मोलिना

@ मर्तिजन - SOLID लिंक के लिए धन्यवाद; मैं इससे पहले नहीं आया हूं। आप JodaTime का उपयोग करने का सुझाव देते हैं; क्या यह जावा कैलेंडर / दिनांक कक्षाओं के लिए सिर्फ (उपयुक्त) फैलाव है? JSR310 (JodaTime का उत्तराधिकारी) के बारे में क्या?
अदायगी

JSR-310 उम्मीद है कि यह जावा 8 में बना देगा (वहाँ एक गुच्छा है कि हम कोशिश करें और ऐसा करने में मदद करें, अगर आप इसमें शामिल होना चाहते हैं तो मुझसे संपर्क करें)। इस बीच, जावा में दिनांक और समय से निपटने के लिए जोडा समय डिफैक्टो एसटीडी है। जावा की तारीख और कैलेंडर प्रणाली के साथ बहुत सी चीजें गलत हैं, मुझे यह भी नहीं पता है कि कहां से शुरू करना है ;-)। हत्यारा यह है कि डेट्स म्यूट हैं और इस बात की कोई तात्कालिक या अवधि की कोई अवधारणा नहीं है या ... मैं वहां रुकने वाला नहीं हूं :-)।
मार्टिनेज वर्बर्ग

1

दूसरों के जवाबों की सराहना करते हुए, मैंने सोचा था कि अच्छा कोड लिखने की कोशिश के दौरान मेरे द्वारा सोची गई कुछ चीजों को साझा करना उचित होगा:

  • इस वर्ग / विधि / चर के बारे में क्या जानने की आवश्यकता है? अर्थात यह ज्ञान कहाँ रहना चाहिए?

  • यह कोड मेरे आवेदन की मेमोरी / प्रदर्शन को कैसे प्रभावित कर सकता है? (मैं स्वीकार करता हूं कि 'समय से पहले अनुकूलन सभी बुराई की जड़ है'; इसलिए मैं बहुत समय बिताने का अनुकूलन करने का सुझाव नहीं दे रहा हूं, बल्कि शुरू में अपना कोड लिखने के दौरान एक चेतना है।)

  • क्या यह स्पष्ट है (कोड, और कोड संरचनाओं से) यह क्या करता है? (मैं अधिकतम का पालन करने की कोशिश करता हूं: "लोगों को समझने के लिए इसे संभव नहीं बनाने के लिए प्रयास करें, लोगों को गलतफहमी के लिए असंभव बनाने का प्रयास करें।")


1

स्ट्रिंग और ArrayList वर्ग को जावा की उचित प्रोग्रामिंग के उत्कृष्ट उदाहरणों के लिए पढ़ें। लेकिन वे अत्यधिक संक्षिप्त हैं, लगभग सी शैली, जो जरूरी नहीं कि बनाए रखने योग्य कोड w / न्यूनतम जावा डॉक्स के लिए सबसे अच्छा है। मेरी दुकान पर आम प्रथा कोई टिप्पणी नहीं है, इसलिए मैं वर्बोस कैमेलकेस var नामों का उपयोग करके कोड द्वारा टिप्पणी करने की कोशिश करता हूं और नई लाइनों के अत्यधिक उपयोग को एक विचार को दूसरे से अलग करने के लिए कहता हूं। मैं अभी भी उनके मूल्यों से भिन्न vars टैब का उपयोग कर बहस करता हूं। टैब्स पठनीयता बढ़ा सकते हैं, आईएमओ, लेकिन केवल जब न्यूनतम रूप से किया जाता है और यह बहुत व्यक्तिपरक है। मुझे लगता है कि यह वास्तव में दर्शकों के बारे में है। यहाँ कोई सबसे अच्छा जवाब नहीं है।

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