मुझे 2-3k लाइन की बहुत सारी फाइलें मिल रही हैं, और यह वास्तव में महसूस नहीं करता है कि उन्हें इतना बड़ा होना चाहिए।
स्रोत कोड फ़ाइल को "बहुत बड़ा" कहने के लिए एक अच्छा मानदंड क्या है ?, एक स्रोत कोड फ़ाइल में अधिकतम कितनी लाइनें होनी चाहिए?
मुझे 2-3k लाइन की बहुत सारी फाइलें मिल रही हैं, और यह वास्तव में महसूस नहीं करता है कि उन्हें इतना बड़ा होना चाहिए।
स्रोत कोड फ़ाइल को "बहुत बड़ा" कहने के लिए एक अच्छा मानदंड क्या है ?, एक स्रोत कोड फ़ाइल में अधिकतम कितनी लाइनें होनी चाहिए?
जवाबों:
एक आदर्श मॉडल के रूप में, मैं निम्नलिखित मानदंडों का उपयोग करता हूं (मार्टिन बेकेट ने एक समान तर्क के साथ, यानी तार्किक संरचना के संदर्भ में सोचने के लिए और कोड की पंक्तियों के संदर्भ में नहीं):
नियम 1
फ़ाइल प्रति एक वर्ग (C ++ में: एक वर्ग -> एक शीर्ष लेख और एक कार्यान्वयन फ़ाइल)।
नियम २
सात को उन वस्तुओं की संख्या माना जाता है जो हमारे मस्तिष्क को भ्रमित किए बिना एक ही समय में निरीक्षण कर सकते हैं। 7 से ऊपर हम जो देखते हैं उसका अवलोकन रखना मुश्किल होता है। इसलिए: प्रत्येक वर्ग में 7-10 से अधिक विधियां नहीं होनी चाहिए। एक वर्ग जिसके पास 10 से अधिक विधि है वह संभवतः बहुत जटिल है और आपको इसे विभाजित करने का प्रयास करना चाहिए। बंटवारा एक बहुत प्रभावी तरीका है क्योंकि हर बार जब आप एक वर्ग को विभाजित करते हैं तो आप प्रत्येक व्यक्ति वर्ग की जटिलता को कम से कम 2 के कारक से कम करते हैं।
नियम ३
एक विधि निकाय जो एक या दो स्क्रीन में फिट नहीं होता है वह बहुत बड़ा है (मेरा मानना है कि एक स्क्रीन / संपादक विंडो लगभग 50 लाइनें है)। आदर्श रूप से, आप पूरी विधि एक विंडो में देख सकते हैं। यदि यह मामला नहीं है, तो आपको केवल छिपे हुए तरीके को भूलकर, ऊपर और नीचे स्क्रॉल करने की आवश्यकता है। इसलिए, यदि आपको पूरी विधि बॉडी को पढ़ने के लिए एक से अधिक स्क्रीन को ऊपर या नीचे स्क्रॉल करना है, तो आपका तरीका संभवतः बहुत बड़ा है और आप आसानी से अवलोकन खो सकते हैं।
फिर से, निजी सहायता विधियों का उपयोग करते हुए बंटवारे के तरीके विधि जटिलता को बहुत तेजी से कम कर सकते हैं (प्रत्येक विभाजन में जटिलता कम से कम आधी है)। यदि आप बहुत सी निजी सहायता विधियों का परिचय देते हैं, तो आप उन्हें इकट्ठा करने के लिए एक अलग वर्ग बनाने पर विचार कर सकते हैं (यदि आपके पास सार्वजनिक लोगों की तुलना में अधिक निजी विधियाँ हैं, तो शायद दूसरा वर्ग आपके मुख्य वर्ग के अंदर छिपा हो)।
इन बहुत मोटे अनुमानों को एक साथ रखना:
तो एक स्रोत फ़ाइल जो 2000 से अधिक लाइनों की है शायद बहुत बड़ी है और बहुत गड़बड़ होने लगी है।
यह वास्तव में एक बहुत ही मोटा अनुमान है और मैं इन मानदंडों का व्यवस्थित रूप से पालन नहीं करता हूं (विशेषकर क्योंकि उचित रिफैक्टरिंग करने के लिए हमेशा पर्याप्त समय नहीं होता है)। साथ ही, जैसा कि मार्टिन बेकेट ने सुझाव दिया था, ऐसी परिस्थितियां हैं जिनमें एक वर्ग विधियों का एक बड़ा संग्रह है और उन्हें कक्षा को छोटा करने के लिए कुछ कृत्रिम तरीके से विभाजित करने का कोई मतलब नहीं है।
वैसे भी, मेरे अनुभव में एक फ़ाइल अपठनीय होने लगती है जब उपरोक्त मापदंडों में से एक का सम्मान नहीं किया जाता है (उदाहरण के लिए एक 300 लाइन विधि बॉडी जो छह स्क्रीन तक फैलती है, या कोड की 5000 लाइनों के साथ एक स्रोत फ़ाइल)।
नहीं - कोड की लाइनों के संदर्भ में नहीं। चालक को तार्किक समूह होना चाहिए। उदाहरण के लिए निश्चित रूप से एक बड़ी फ़ाइल में कई कक्षाएं नहीं होनी चाहिए
यदि आपके पास एक वर्ग है जो वैध रूप से कुछ सौ तरीके (3 डी मॉडलिंग में असंभव नहीं है) तो यह मनमाने फाइलों में विभाजित करने के लिए बहुत कम सुविधाजनक होगा। हम यह तब करते थे जब मेमोरी स्कार्इसर और प्रोसेसर धीमा हो जाता था - और यह एक दर्द था, लगातार फ़ंक्शन की परिभाषा खोज रहा था।
जब इसमें कोड अप्राप्य हो जाता है। अर्थात: यदि आप जिस विधि / वर्ग / कार्य को देख रहे हैं (और संपादित / डीबग करना है) कोड को देखकर आप यह नहीं बता सकते हैं कि क्या है, और यदि ऐसा है, तो यह कहाँ है।
आपकी आईडीई / संपादक की पसंद और विशेषताएं इस ऊपरी सीमा की वास्तविक मात्रा को प्रभावित करेंगी, हालांकि। कोड फोल्डिंग , फंक्शन / मेथड लिस्टिंग, और लुकअप इस विकास परिदृश्य को प्रस्तुत करने वाले क्षण को स्थगित कर देगा ।
लेकिन जब यह होता है, तो इसे विभाजित करने का समय आ गया है।
यहां एक वैकल्पिक दृश्य दिया गया है: आप फ़ाइल आकार को सीमित करने के बारे में पूछ रहे हैं। मेरी राय है कि कई कारक हैं जो बड़ी कोड फ़ाइलों को बहुत समस्याग्रस्त बनाते हैं। कभी-कभी कोड फ़ाइल बहुत बड़ी होती है, लेकिन इसकी सामग्री अच्छी तरह से क्लस्टर्ड और बेहद साफ कोड होती है, ताकि आकार में कोई महत्वपूर्ण समस्या न आए। मैंने बहुत सी फाइलें देखी हैं जो उच्च एलओसी के बावजूद बहुत पठनीय हैं।
LOC मीट्रिक में टैप करने के बजाय, मैं इतिहास डेटा का उपयोग करने के बारे में सोचना चाहूंगा कि कोड को उन बड़ी फ़ाइलों में कितनी बार तोड़ा जाता है। आमतौर पर इसका कारण यह है कि डेवलपर्स के पास एक ही फ़ाइल में प्रासंगिक अन्य स्थानों की जांच करने और पर्याप्त समझ के बिना "त्वरित फिक्स" मानसिकता के साथ बदलाव करने का धैर्य रखने का समय नहीं है।
बड़ा खतरा कॉपी-पेस्ट कोड की उपस्थिति है। कॉपी-पेस्ट कोडिंग स्वाभाविक रूप से एलओसी वृद्धि को गति देता है। मुझे लगता है कि कॉपी-पेस्ट को खत्म करना एलओसी को कुछ जादू की संख्या से कम रखने की तुलना में अधिक महत्वपूर्ण है। शुद्ध कॉपी-पेस्ट के अलावा, बड़ी फ़ाइलों में एक दूसरा खतरा भी है: अतिव्यापी कार्यक्षमता। जितनी बड़ी फ़ाइल है, उतनी ही अधिक संभावना है कि आप कुछ स्निपेट को फिर से लागू करेंगे जो पहले से ही उसी फ़ाइल के किसी अन्य अनुभाग में है।
इसलिए, जब तक बग फिक्स अनुपात (सभी कमिट के लिए बग फिक्स का अनुपात) बड़ी फ़ाइलों के लिए कम है, स्थिति सहनीय है। कृपया git log
इसके लिए प्रयास करें और त्रुटियों के संबंध में कितने कमिट हैं। या एक उपकरण का उपयोग करें जो स्वचालित रूप से विश्लेषण और कल्पना कर सकता है, जैसे सॉफ्टग्राम ।
इस पर विचार करें Metaphor
। जब कोड लंबाई की बात आती है, तो मुझे लगता है कि हमें निम्नलिखित पर विचार करना चाहिए:
The Cat in The Hat (50 pp.)
तथा
Lord of The Rings (1,178 pp.)
कुछ भी गड़बड़ नहीं है Lord of the Rings
। यह एक शानदार किताब है। The Cat in the Hat
एक बेहतरीन किताब भी है। दोनों को 5 साल के बच्चों द्वारा समझा जा सकता है, लेकिन केवल एक सामग्री के कारण बेहतर अनुकूल है।
मेरी बात के अनुसार, जब भी हम कर सकते हैं लेखन कोड को 5 साल की उम्र में बनाना चाहिए। Cyclomatic Complexity
एक महत्वपूर्ण अवधारणा है जो डेवलपर्स को कोड उत्पन्न करने पर विचार करना चाहिए। यथासंभव कार्यक्षमता और कोड पुन: प्रयोज्य को बढ़ाने के लिए पुस्तकालयों का उपयोग करना और बनाना। इस तरह से हमारा कोड जितना हम देखते हैं उससे अधिक मात्रा में बोल सकते हैं।
हम में से अधिकांश विधानसभा कोड नहीं लिख रहे हैं । लेकिन हमारे कोड की जड़ विधानसभा है। 10000 लाइनों की असेंबली के माध्यम से खोज करना अजगर की 10000 लाइनों की तुलना में कठिन है, अगर यह सही तरीके से किया जाता है।
लेकिन कुछ काम के लिए 500 से 1000 लाइन लिखने की आवश्यकता होती है। कोड के साथ हमारा लक्ष्य स्वच्छ कोड की 300 लाइनों को लिखना होना चाहिए।
डेवलपर्स के रूप में, हम "लॉर्ड ऑफ द रिंग्स" लिखना चाहते हैं। जब तक हमें एक बग नहीं मिलता है और हम चाहते हैं कि हम "कैट इन द हैट" लिख रहे हैं। अहंकार की माप कोडिंग मत करो। बस चीजों को साधारण तरीके से काम करें।
डेवलपर्स दस्तावेज़ कोड नहीं करना चाहते हैं, (मुझे व्यक्तिगत रूप से दस्तावेज़ कोड पसंद है, मैं वह स्वार्थी नहीं हूं)। इसलिए ऐसा कोड न लिखें, जिसे केवल आप समझ सकें / पढ़ सकें। Cat in the Hat
कोड लिखें ।
हम सभी जानते हैं कि आप जेआरआर टोलकेन (आपके सिर में) हैं। याद रखें कि आपके पास बग फ्री कोड साबित करने के लिए कुछ नहीं होगा।
रूपक का एक और कारण।
पाठक को धन का प्रसार न करें। यदि आप लोगों के समूह के साथ काम करते हैं और उन सभी को उस एक बड़ी फ़ाइल को बदलना है, तो आप शायद खुद को git
मर्ज नरक में डाल देंगे ।
हर किसी को रिबासिंग पसंद होती है।
-> किसी ने कभी नहीं कहा!
टीएल; डीआर पठनीयता पर ध्यान केंद्रित। अपने कोड और सहायक को कई लाइनों और फाइलों पर फैलाएं जितना आप कर सकते हैं। एक ही फाइल में 8 या 9 कक्षाएं न फेंके, यह कोड को पढ़ने के लिए कठिन और बनाए रखने के लिए कठिन बनाता है। यदि आपके पास एक बड़ी शर्त कोड या लूप है, तो भाषा को समर्थन देने पर उन्हें लैम्ब्डा में बदलने पर विचार करें। यूटिलिटी फ़ंक्शंस को कोड पठनीयता बढ़ाने के लिए एक महान एवेन्यू माना जाना चाहिए। भारी घोंसले से बचें।