मैं लंबे कार्यों के पक्ष में कम से कम दो तर्क सोच सकता हूं:
इसका मतलब है कि आपके पास प्रत्येक पंक्ति के आसपास बहुत सारे संदर्भ हैं। इसे औपचारिक रूप देने का एक तरीका: अपने कोड का नियंत्रण प्रवाह ग्राफ बनाएं। फ़ंक्शन प्रविष्टि और फ़ंक्शन निकास के बीच एक शीर्ष (~ = लाइन) पर, आप आने वाले सभी किनारों को जानते हैं । कार्य जितना लंबा होता है, उतने अधिक वर्टिकल होते हैं।
कई छोटे कार्यों का मतलब है कि एक बड़ा और अधिक जटिल कॉल ग्राफ है। यादृच्छिक फ़ंक्शन में एक यादृच्छिक रेखा चुनें, और इस प्रश्न का उत्तर दें "किस संदर्भ में यह रेखा निष्पादित है?" यह कॉल ग्राफ जितना बड़ा और अधिक जटिल हो जाता है, क्योंकि आपको उस ग्राफ़ में और अधिक कोने देखना होगा।
मन के लिए लंबे कार्यों-इकाई-परीक्षणीय स्प्रिंग्स के खिलाफ भी तर्क हैं। एक और दूसरे के बीच चयन करते समय अपने अनुभव के लिए t Useh̶e̶ ̶f̶o̶r̶c̶e experience का उपयोग करें।
नोट: मैं यह नहीं कह रहा हूं कि आपका बॉस सही है, केवल उसका दृष्टिकोण पूरी तरह से मूल्य से रहित नहीं हो सकता है।
मुझे लगता है कि मेरा दृष्टिकोण यह है कि अच्छा अनुकूलन पैरामीटर फ़ंक्शन की लंबाई नहीं है। मुझे लगता है कि निम्नलिखित के संदर्भ में सोचने के लिए एक desiderata अधिक उपयोगी है: बाकी सभी समान हैं, यह कोड से बाहर पढ़ने में सक्षम होना बेहतर है दोनों व्यापार तर्क और कार्यान्वयन का एक उच्च-स्तरीय विवरण। (निम्न-स्तरीय कार्यान्वयन विवरण हमेशा पढ़ा जा सकता है यदि आप प्रासंगिक बिट कोड पा सकते हैं।)
डेविड अर्नो के जवाब पर टिप्पणी :
छोटे कार्यों को लिखना एक दर्द है क्योंकि यह आपको प्रत्येक छोटे कार्यों में यह देखने के लिए मजबूर करता है कि कोड क्या कर रहा है।
यदि फ़ंक्शन अच्छी तरह से नामित है, तो यह मामला नहीं है। isApplicationInProduction स्व-स्पष्ट है और यह देखने के लिए कि यह क्या होता है, कोड की जांच करने के लिए आवश्यक नहीं होना चाहिए। वास्तव में विपरीत सच है: कोड की जांच से पता चलता है कि फ़ंक्शन नाम की अपेक्षा इरादे से कम है (यही कारण है कि आपके बॉस को टिप्पणियों का सहारा लेना पड़ता है)।
नाम स्पष्ट करता है कि रिटर्न वैल्यू का क्या मतलब है , लेकिन यह कोड को निष्पादित करने के प्रभावों के बारे में कुछ नहीं कहता है (= कोड क्या करता है )। नाम (केवल) इरादे के बारे में जानकारी देते हैं, कोड व्यवहार के बारे में जानकारी देता है (जिससे इरादे के कुछ हिस्सों को कभी-कभी अनुमान लगाया जा सकता है)।
कभी-कभी आप एक चाहते हैं, कभी-कभी दूसरे, इसलिए यह अवलोकन एकतरफा सार्वभौमिक रूप से मान्य निर्णय नियम नहीं बनाता है।
मुख्य लूप में सब कुछ रखो भले ही मुख्य लूप 300 लाइनों से अधिक हो, यह पढ़ने में तेज है
यह स्कैन करने के लिए तेज़ हो सकता है, लेकिन कोड को वास्तव में "पढ़ने" के लिए, आपको इसे अपने सिर में प्रभावी ढंग से निष्पादित करने में सक्षम होने की आवश्यकता है। यह छोटे कार्यों के साथ आसान है और वास्तव में, उन विधियों के साथ वास्तव में कठिन है जो 100 लाइनों की लंबी हैं।
मैं सहमत हूं कि आपको इसे अपने सिर में निष्पादित करना होगा। यदि आपके पास एक बड़े फ़ंक्शन बनाम कई छोटे कार्यों में कार्यक्षमता की 500 लाइनें हैं, तो यह मेरे लिए स्पष्ट नहीं है कि यह आसान क्यों है।
मान लीजिए कि सीधी-रेखा के अत्यधिक साइड-इफ़ेक्टिंग कोड की 500 लाइनों का चरम मामला है, और आप जानना चाहते हैं कि क्या प्रभाव बी से पहले या बाद में होता है। बड़े फ़ंक्शन मामले में, दो लाइनों का पता लगाने के लिए पेज अप / डाउन का उपयोग करें और फिर तुलना करें पंक्ति संख्याएँ। कई छोटे-कार्यों में, आपको यह याद रखना होगा कि कॉल ट्री में प्रभाव कहां होता है, और यदि आप भूल गए हैं कि आपको इस पेड़ की संरचना को फिर से परिभाषित करने के लिए एक गैर-तुच्छ राशि खर्च करनी होगी।
जब आप सहायक कार्यों के कॉल ट्री को ट्रेस कर रहे हैं, तो आपको बिजनेस लॉजिक से लेकर कार्यान्वयन के विवरणों तक का निर्धारण करने की चुनौती का सामना करना पड़ेगा। मैं साक्ष्य के बिना दावा करता हूं कि कॉल ग्राफ जितना सरल है, यह भेद करना उतना ही आसान है।
(*) कम से कम मैं इसके बारे में ईमानदार हूं ;-)
एक बार फिर, मुझे लगता है कि दोनों दृष्टिकोणों में ताकत और कमजोरियां हैं।
अगर आपको कोड डुप्लिकेट करना है तो केवल छोटे कार्य लिखें
मैं असहमत हूं। जैसा कि आपके कोड उदाहरण से पता चलता है, छोटे, अच्छी तरह से नामित कार्यों में कोड की पठनीयता में सुधार होता है और जब भी इसका उपयोग किया जाना चाहिए [जैसे] आपको "कैसे" में दिलचस्पी नहीं है, केवल कार्यक्षमता का एक टुकड़ा "क्या" है।
चाहे आप "कैसे" या "क्या" में रुचि रखते हैं, उस उद्देश्य का एक कार्य है जिसके लिए आप कोड पढ़ रहे हैं (जैसे एक सामान्य विचार प्राप्त करना बनाम एक बग को ट्रैक करना)। जिस उद्देश्य के लिए आप कोड पढ़ रहे हैं, वह प्रोग्राम लिखते समय उपलब्ध नहीं है, और आप विभिन्न उद्देश्यों के लिए कोड को पढ़ेंगे; विभिन्न निर्णय अलग-अलग उद्देश्यों के लिए अनुकूलित होंगे।
उस ने कहा, यह बॉस के दृष्टिकोण का एक हिस्सा है जो मैं शायद सबसे ज्यादा असहमत हूं।
टिप्पणी के नाम के साथ एक फ़ंक्शन न लिखें, ऊपर टिप्पणी के साथ अपनी जटिल लाइन ऑफ़ कोड (3-4 लाइनें) डालें। इस तरह आप फेल कोड को सीधे संशोधित कर सकते हैं
मैं वास्तव में इस के पीछे के तर्क को नहीं समझ सकता, यह मानते हुए कि यह वास्तव में गंभीर है। [...] टिप्पणियों में एक मौलिक दोष है: वे संकलित / व्याख्या नहीं की जाती हैं और इसलिए इकाई परीक्षण नहीं किया जा सकता है। कोड संशोधित हो जाता है और टिप्पणी अकेले छोड़ दी जाती है और आप अंत तक यह नहीं जानते हैं कि कौन सही है।
कंपाइलर केवल समानता के लिए नामों की तुलना करते हैं, वे आपको कभी भी भ्रामक नाम नहीं देते हैं। इसके अलावा, क्योंकि कई कॉल साइटें नाम से दिए गए फ़ंक्शन को लागू कर सकती हैं, इसलिए कभी-कभी नाम बदलने के लिए अधिक कठिन और त्रुटि-प्रवण होता है। टिप्पणियों में यह समस्या नहीं है। हालाँकि, यह कुछ हद तक सट्टा है; वास्तव में इसे निपटाने के लिए, किसी को शायद इस बारे में डेटा की आवश्यकता होगी कि क्या प्रोग्रामर भ्रामक टिप्पणियों बनाम भ्रामक नामों को अपडेट करने की अधिक संभावना रखते हैं, और मेरे पास ऐसा नहीं है।