"हाय, अमीगो! आज मैं आपको कोड स्टाइल और कोड स्टाइल के महत्व के बारे में बताने जा रहा हूं।"

"मैं वही शुरू करूंगा जो सबसे ज्यादा मायने रखता है।  जावा कोड को पढ़ना आसान होना चाहिए।  कोड के लिए सामान्य दृष्टिकोण यह है: कोड एक बार लिखा जाता है लेकिन सौ बार पढ़ा जाता है।"

"मान लीजिए कि आप और 10 अन्य प्रोग्रामर एक आवेदन पत्र लिख रहे हैं। आप तीन साल के लिए आवेदन पर काम करते हैं, हर तीन महीने में इंटरमीडिएट रिलीज के साथ।"

"इतनी देर?"

"यह जावा है, मेरे युवा टिड्डे!" एक दर्जन से अधिक सर्वरों पर चलने वाली और 6 से अधिक वर्षों में 100 लोगों द्वारा लिखी गई एक उद्यम प्रणाली के बारे में क्या? ऐसा भी कभी-कभी होता है।"

"वाह।"

"वैसे भी, मुख्य नियम, कोड के लिए मुख्य आवश्यकता यह है कि इसे अन्य डेवलपर्स के लिए पढ़ना आसान होना चाहिए।"

"अन्य प्रोग्रामिंग भाषाओं में, लोग अक्सर छोटे कार्यों पर छोटी टीमों के रूप में काम करते हैं, इसलिए उनके पास एक और मुख्य नियम हो सकता है, जैसे 'यह काम करता है? उत्कृष्ट'।"

"कुछ वर्षों के दौरान, आपकी टीम के सभी सदस्य आपके द्वारा लिखे गए कोड में कई बदलाव करेंगे। और हर बार उन्हें यह समझना होगा कि कोड कैसे काम करता है।"

"और पूरी तरह से काम करने वाले अतुलनीय कोड को बदलना मुश्किल है।  वे इसे त्याग देंगे और इसे अपने तरीके से फिर से लिखेंगे।  इसलिए, ऐसा कोड लिखें जिसे दूसरे समझ सकें।  यदि आप अपने कोड में सुधार कर सकते हैं, तो इसे सुधारें। यदि इसे सुधारा जा सकता है, तो इसमें सुधार की जरूरत है! "

"यदि आप 15 मिनट के लिए कोड लिखते हैं और फिर इसे सुधारने में दो घंटे लगाते हैं, तो आप इसे सही कर रहे हैं। आप टीम को कितना समय बचा रहे हैं?"

"'आपके कोड को समझने के लिए 2 घंटे' x '100 बार जब लोगों को इसे समझने की आवश्यकता होगी' = 200 घंटे।"

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

"क्या कोड सही तरीके से काम नहीं कर रहा है? हम इसे ठीक कर देंगे। अनुकूलित नहीं है? हम इसे अनुकूलित करेंगे। प्रलेखित नहीं है? हम टिप्पणियां जोड़ेंगे।"

" क्या कोड पढ़ना मुश्किल है? उस बकवास को कूड़ेदान में फेंक दें और सब कुछ फिर से स्क्रैच से लिखें! "

"मैंने नहीं सोचा था कि यह इतनी बड़ी बात थी।"

"जावा के प्रमुख प्रोग्रामिंग भाषा होने का एक कारण यह है कि सभी जावा कोड को अन्य प्रोग्रामर द्वारा पढ़ने के लिए लिखा जाता है।"

"अब दूसरे प्रश्न पर चलते हैं: आप अपने कोड को पढ़ने में जितना संभव हो उतना आसान कैसे बनाते हैं? "

"कोई भी तब समझ सकता है जब कोई अपनी मूल भाषा में जाने-पहचाने शब्दों को बोलता है। यहां भी यही सच है। जब प्रोग्रामर आसानी से अनुमान लगा सकता है तो कोड को पढ़ना आसान होता है:

ए)  प्रत्येक विधि क्या करती है

बी)  प्रत्येक वर्ग का उद्देश्य

सी)  वास्तव में प्रत्येक चर क्या स्टोर करता है।

यह सब नामों में संप्रेषित किया जाता है: वर्ग के नाम, विधि के नाम और चर के नाम। इसके अतिरिक्त, वहाँ शैली है जब नामकरण चर की बात आती है। और कोड शैली है।"

"मैं सुनने के लिए तैयार हूँ।"

" प्रोग्रामिंग अच्छी अंग्रेजी पर आधारित है!  एक अच्छी तरह से लिखा गया प्रोग्राम सामान्य तकनीकी दस्तावेज की तरह पढ़ता है। "

" चलिए नामों से शुरू करते हैं। "

"एक विधि नाम को संक्षेप में वर्णन करना चाहिए कि विधि क्या करती है। फिर कोड को सरल गद्य की तरह पढ़ा जा सकता है।"

कार्यक्रम
public String downloadPhoto(String url)
{
 String resultFileName = TempHelper.createTempFileName();

 Downloader downloader = new SingleFileDownloader(new Url(url));
 downloader.setResultFileName(resultFileName)
 downloader.start();
 while(downloader.isDone())
 {
  Thread.sleep(1000);
 }

 if (downloader.hasError())
  return null;

 return resultFileName;
}

"यहां बताया गया है कि ऐसा कार्यक्रम कैसे पढ़ा जाता है।"

लाइन 1।

"विधि को 'डाउनलोडफोटो' कहा जाता है। ऐसा लगता है कि यह इंटरनेट से एक फोटो फ़ाइल डाउनलोड करता है। यह कहां से डाउनलोड होता है? हम अभी तक नहीं जानते हैं। कहां से? विधि में यूआरएल नाम का एक पैरामीटर है - यह शायद यूआरएल है डाउनलोड।"

रेखा 3।

"परिवर्तनीय परिणामफाइलनाम घोषित किया गया है और TempHelper.createTempFileName() द्वारा एक मान असाइन किया गया है;"

तो यह फ़ाइल का स्थानीय पथ होना चाहिए जहाँ हम अपनी डाउनलोड की गई फ़ाइल को सहेजेंगे।

"नाम 'TempHelper' हमें कुछ नहीं बताता। 'हेल्पर' प्रत्यय कहता है कि यह एक प्रकार की उपयोगिता वर्ग है जिसमें महत्वपूर्ण व्यावसायिक तर्क शामिल नहीं हैं, बल्कि इसका उपयोग अक्सर होने वाले नियमित कार्यों को सरल बनाने के लिए किया जाता है।"

"विधि नाम 'createTempFileName' इंगित करता है कि यह विधि एक अस्थायी फ़ाइल (अस्थायी फ़ाइल) का नाम बनाती है और लौटाती है। एक अस्थायी फ़ाइल एक अस्थायी फ़ाइल होती है जो थोड़ी देर के लिए बनाई जाती है और फिर आमतौर पर प्रोग्राम बंद होने तक हटा दी जाती है। "

पंक्ति 5।

"एक सिंगलफाइलडाउनलोडर ऑब्जेक्ट बनाया गया है और वेरिएबल डाउनलोडर को असाइन किया गया है।"

यह वह वस्तु है जो हमारी फाइल को इंटरनेट से डाउनलोड करेगी।

"एक सिंगलफाइलडाउनलोडर ऑब्जेक्ट को वेरिएबल डाउनलोडर को सौंपा गया है। नाम से, हम मान सकते हैं कि प्रोग्राम में कई प्रकार के डाउनलोडर वर्ग हैं। एक को सिंगल फाइल डाउनलोड करने के लिए लिखा गया था, और हम शायद समूहों के लिए कोड में अन्य डाउनलोडर्स का सामना करने की उम्मीद कर सकते हैं। नामों वाली फाइलों की संख्या जैसे: मल्टीफाइलडाउनलोडर, फाइलग्रुपडाउनलोडर, या डायरेक्टरीडाउनलोडर"

पंक्ति 6।

"हम डाउनलोडर ऑब्जेक्ट की परिणामफाइलनाम संपत्ति को चर परिणामफाइलनाम के मान के बराबर सेट करते हैं। दूसरे शब्दों में, हम लोडर को बताते हैं कि डाउनलोड की गई फ़ाइल को कहाँ सहेजना है। जैसा कि आप उम्मीद करेंगे। इसलिए, हम मूल रूप से कोड की भविष्यवाणी कर रहे हैं!"

रेखा 7.

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

लाइन्स 8-11।

"आह। यहां हम किसी ऐसे व्यक्ति द्वारा लिखे गए मानक लूप को देखते हैं जो डाउनलोड पूरा होने की प्रतीक्षा कर रहा है। डाउनलोडर ऑब्जेक्ट में एक पूर्ण संपत्ति होती है, जिसे isDone() विधि द्वारा वापस किया जाता है। क्योंकि विधि को getDone() के बजाय isDone() कहा जाता है। ), हम निष्कर्ष निकालते हैं कि किया गया चर एक बूलियन या शायद एक बूलियन है।"

लाइन्स 13-14।

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

रेखा 16.

"हम उस स्थानीय फ़ाइल का पथ लौटाते हैं जिसमें डाउनलोड की गई फ़ाइल है।"

"वाह!"

"इस कार्यक्रम का कोड यह बिल्कुल स्पष्ट करता है कि यह क्या करता है। आप यह भी अनुमान लगा सकते हैं कि कार्यक्रम कैसे आयोजित किया जाता है और हम कौन सी अन्य कक्षाएं/विधियाँ खोजेंगे।"

"अब मुझे समझ में आया कि नाम कितने महत्वपूर्ण हैं।"

"नामों के बारे में अधिक जानकारी। आप अक्सर अनुमान लगा सकते हैं कि किसी वस्तु/वर्ग में कौन सी विधियाँ हैं। उदाहरण के लिए, यदि कोई वस्तु एक संग्रह है, तो इसकी सबसे अधिक संभावना है कि तत्वों की संख्या प्राप्त करने के लिए आकार () या गिनती () विधि होगी। साथ ही , इसमें शायद एक ऐड () या इन्सर्ट () विधि होगी। तत्वों को संग्रह कक्षाओं से get/getItem/getElement विधियों का उपयोग करके पुनर्प्राप्त किया जाता है।"

"यदि एक चर को i, j, या k कहा जाता है, तो यह एक लूप काउंटर होने की सबसे अधिक संभावना है।"

"यदि एक चर को एम या एन कहा जाता है, तो यह संभवतः सरणी/संग्रह का आकार होता है।"

"यदि एक चर को नाम कहा जाता है, तो यह सबसे अधिक संभावना है कि यह किसी के नाम वाली स्ट्रिंग है।"

"यदि एक वर्ग को FileInputStream कहा जाता है, तो यह एक साथ एक फ़ाइल और एक इनपुट स्ट्रीम है।"

"आप जितना अधिक कोड देखते हैं, दूसरों के कोड को पढ़ना उतना ही आसान हो जाता है।"

"लेकिन कभी-कभी ऐसा कोड होता है जिसे पढ़ना बहुत मुश्किल होता है। इस मामले में, यहां एक बहुत ही व्यावहारिक सलाह है:"

बख्शीश
कोड ऐसे लिखें जैसे कि यह एक हिंसक मनोरोगी द्वारा बनाए रखा जाएगा जो जानता है कि आप कहां रहते हैं

"यह मज़ेदार है और एक ही समय में मज़ेदार नहीं है।"

"अब चरों को नाम देने के लिए प्रयुक्त शैलियों के बारे में थोड़ा सा।"

"जावा डेवलपर्स चर और विधियों के लिए अत्यधिक जानकारीपूर्ण नाम देने का प्रयास करते हैं। नतीजतन, नामों में अक्सर कई शब्द होते हैं। यौगिक नामों के पूंजीकरण के लिए 4 शैलियाँ हैं।"

1) लोअरकेस  - सभी शब्द लोअरकेस अक्षरों में लिखे गए हैं। उदाहरण के लिए:

'ग्रीन हाउस'  बना 'ग्रीनहाउस'

'हॉलीवुड गर्ल'  बनी  'हॉलीवुड गर्ल'

इस शैली का उपयोग पैकेज नामों के लिए किया जाता है।

2) अपरकेस  - सभी शब्द बड़े अक्षरों में लिखे गए हैं और एक अंडरस्कोर द्वारा अलग किए गए हैं। उदाहरण के लिए:

'अधिकतम मान' MAX_VALUE  हो जाता है

'बिल्लियों की संख्या' CAT_COUNT  हो जाती है

"इस शैली का उपयोग स्थिरांक (अंतिम स्थिर फ़ील्ड) के नाम के लिए किया जाता है।"

3) कैमलकेस  - सभी शब्द लोअरकेस अक्षरों में लिखे गए हैं, सिवाय इसके कि प्रत्येक शब्द का पहला अक्षर अपरकेस है। उदाहरण के लिए:

'ग्रीन हाउस'  बना  'ग्रीनहाउस'

'हॉलीवुड गर्ल'  बनी 'हॉलीवुड गर्ल'

इस शैली का उपयोग कक्षाओं और इंटरफेस के नाम के लिए किया जाता है।

4) लोअर कैमलकेस (मिश्रित मामला)  - सभी शब्द लोअरकेस अक्षरों का उपयोग करके लिखे गए हैं, प्रत्येक शब्द के पहले अक्षर को छोड़कर पहला अक्षर अपरकेस है। उदाहरण के लिए:

'गेट विड्थ' बन जाता है 'गेटविड्थ'

'गेट हॉलीवुड गर्ल नेम' बन जाता है  'गेटहॉलीवुडगर्लनाम'

"इस शैली का उपयोग चर और विधियों के नाम के लिए किया जाता है।"

"तो, बहुत सारे नियम नहीं हैं।"

1)  सब कुछ लोअर कैमलकेस में लिखा है।

2)  कक्षाओं और इंटरफेस के नाम हमेशा पूंजीकृत होते हैं।

3)  पैकेज के नाम हमेशा लोअरकेस होते हैं।

4)  स्थिरांक हमेशा अपरकेस होते हैं।

"कुछ बारीकियाँ हैं, लेकिन सामान्य तौर पर यही है।"

"अब तरीकों के बारे में।  "विधि के नाम लगभग हमेशा एक क्रिया से शुरू होते हैं! 'गणना' एक विधि के लिए एक बुरा नाम है। इसे getCount() कहना बेहतर है। एक विधि ऑब्जेक्ट पर कुछ क्रिया करती है:  स्टार्टडाउनलोड , इंटरप्ट  , स्लीप  , लोडपिरेटम्यूजिक ।"

"जैसा कि आप पहले से ही जानते हैं, ऑब्जेक्ट के गुणों/फ़ील्ड के साथ काम करने के लिए गेटर्स और सेटर्स हैं:  getName / setName , getCount / setCount , आदि।"

"बूलियन्स के लिए एकमात्र अपवाद है। बूलियन्स के लिए, गेट्टर नाम 'is' का उपयोग करते हैं, न कि 'get' का, जैसे isDone, isEmpty। इस तरह यह सामान्य भाषण के करीब है।"

"8 के बजाय दो घंटे एक दिन काम करने के बारे में क्या? प्रलोभन?"

"हाँ!"

"जैसा कि आपको होना चाहिए। एक जूनियर जावा डेवलपर के लिए, मूल आवश्यकता जावा, यानी जावा कोर की मूल बातें की उत्कृष्ट समझ है।"

"मेरे पास एक और सवाल है। तत्वों की संख्या प्राप्त करने के लिए हमारे पास ये अलग-अलग तरीके क्यों हैं?"

कक्षा तत्वों की संख्या प्राप्त करने के लिए विधि/संपत्ति
डोरी लंबाई ()
सरणी लंबाई
सारणी सूची आकार ()
थ्रेडग्रुप सक्रिय गणना ()

"सबसे पहले, जावा का आविष्कार 20 साल पहले किया गया था, सेटकाउंट / गेटकाउंट जैसी आवश्यकताओं की स्थापना से पहले, और सी भाषा से 'जितना संभव हो उतना छोटा बनाने' के लिए एक आम दृष्टिकोण लिया गया था।"

"दूसरा, शब्दार्थ यहाँ एक भूमिका निभाता है। जब एक सरणी के बारे में बात करते हैं, तो हम इसकी लंबाई के बारे में बात करते हैं। एक संग्रह के बारे में बात करते समय, हम इसके आकार के बारे में बात करते हैं।"

"क्या दिलचस्प सबक है।"

"मैं आपको और बताना चाहता हूं, लेकिन मुझे डर है कि आपको यह सब एक बार में याद नहीं रहेगा। बेहतर होगा कि आप इसे छोटी-छोटी सर्विंग्स में पेश करें।"

"लेकिन मैं घुंघराले ब्रैकेट के उपयोग के संबंध में शैली को छूना चाहता हूं: {}। दो दृष्टिकोण हैं:"

1)  ब्रैकेट हर बार एक नई लाइन पर जाता है

2)  ओपनिंग ब्रैकेट पिछली लाइन के अंत में जाता है, जबकि क्लोजिंग ब्रैकेट एक नई लाइन पर जाता है। इस स्टाइल को 'इजिप्टियन ब्रेसेस' कहा जाता है।

"ईमानदारी से, आपको यह चुनना है कि कोड कैसे करना है। बहुत से लोग एक ही लाइन पर ओपनिंग ब्रेस का उपयोग करते हैं। कई लोग इसे एक नई लाइन पर रखते हैं। यह इस बात पर बहस की तरह है कि अंडे के किस सिरे को तोड़ना है: छोटा सिरा या बड़ा अंत।"

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

"दिलचस्प पाठ के लिए धन्यवाद, बिलाबो। मैंने जो कहा है उस पर विचार करने जाऊंगा।"