दुष्प्रभाव कम करें (आदर्श रूप से कोई नहीं है)
एक फ़ंक्शन जिसके कारण अपने स्वयं के दायरे के बाहर के राज्यों में 3 परिवर्तन होते हैं, उनके बारे में तर्क करना और बनाए रखना बहुत मुश्किल होता है, जो सिर्फ कुछ इनपुट करता है और कुछ अन्य आउटपुट करता है। आप केवल यह नहीं जान सकते हैं कि फ़ंक्शन क्या करता है, आपको यह याद रखना होगा कि उसने क्या किया और अन्य सभी प्रासंगिक कार्यों को कैसे प्रभावित करता है।
ओओपी को कम करने के लिए साइड इफेक्ट को कम करने का मतलब यह भी है कि कम सदस्यों के साथ कक्षाएं, और विशेष रूप से कम सदस्य जो कक्षा की स्थिति को संशोधित कर सकते हैं, क्योंकि सदस्य कार्य अपने स्वयं के परे राज्यों को संशोधित कर सकते हैं और दुष्प्रभाव हो सकते हैं (वे वर्ग के आंतरिक, उदाहरण के लिए हेरफेर कर सकते हैं)। इसका मतलब यह भी है कि अपने स्वयं के कम डेटा सदस्यों के साथ कक्षाएं ताकि उन तरीकों के साथ छेड़छाड़ करने के लिए कम राज्य हो और कम दुष्प्रभाव वे पैदा कर सकें।
एक सरल उदाहरण के रूप में, कल्पना करें कि एक फैंसी डेटा संरचना को डिजाइन करने की कोशिश की जाए जो एक sorted
राज्य को बनाए रख सकती है जो यह निर्धारित करने के लिए उपयोग करता है कि क्या द्विआधारी या रैखिक खोज करना है। ऐसे मामले में, डिजाइन को दो वर्गों में अलग करना उपयोगी हो सकता है। sorted
अनसोल्ड क्लास पर कॉल करने पर दूसरी क्लास का डेटा स्ट्रक्चर वापस आ सकता है जो हमेशा अपनी सामग्री को सॉर्ट करता है। अब आपके पास कम साइड इफेक्ट्स (इसलिए कम त्रुटि-प्रवण और कोड को समझने में आसान) के साथ-साथ अधिक व्यापक रूप से लागू कोड (छोटे डिजाइनों के लिए प्रसंस्करण और मानव बौद्धिक दक्षता दोनों में ही बेकार हो जाएगा जिन्हें कभी भी हल करने की आवश्यकता नहीं है)।
अतिरंजित बाहरी निर्भरता से बचें
आप अपेक्षाकृत सरल कार्य को पूरा करने के लिए 13 अलग-अलग पुस्तकालयों का उपयोग करके अधिकतम कोड पुन: उपयोग के साथ सबसे अधिक संभावित कोड कोड को लागू करने में सक्षम हो सकते हैं। हालाँकि, तब तक आपके पाठकों के लिए बौद्धिक ओवरहेड स्थानांतरित हो जाता है, जिससे उन्हें 13 विभिन्न पुस्तकालयों के कम से कम भागों को समझने में मदद मिलती है। इस अंतर्निहित जटिलता की तुरंत सराहना की जानी चाहिए, जिसने किसी तीसरे पक्ष के पुस्तकालय को बनाने और बनाने की कोशिश की, जिसे कार्य करने के लिए एक दर्जन अन्य पुस्तकालयों के निर्माण और निर्माण की आवश्यकता थी।
यह शायद एक बहुत ही विवादास्पद दृश्य है, लेकिन मैं विपरीत मोड के लिए कुछ मामूली कोड दोहराव को पसंद करूंगा, बशर्ते अंतिम परिणाम अच्छी तरह से परीक्षण किया गया हो (अनपेक्षित दोषपूर्ण कोड की तुलना में कुछ भी बुरा नहीं है)। यदि सदिश क्रॉस उत्पाद की गणना करने के लिए डुप्लिकेट किए गए कोड की 3-पंक्तियों के बीच है या कोड की 3 पंक्तियों को शेव करने के लिए एक महाकाव्य गणित पुस्तकालय में खींच रहा है, तो मैं पूर्व का सुझाव दूंगा जब तक कि आपकी पूरी टीम इस गणित पुस्तकालय के साथ बोर्ड पर न हो जिस बिंदु पर आप अभी भी कोड के 3 लाइनों को 1 के बजाय लिखने पर विचार कर सकते हैं यदि यह डिकॉउलिंग लाभों के बदले में तुच्छ है।
कोड का पुन: उपयोग एक संतुलन कार्य है। बहुत अधिक पुन: उपयोग करें और आप बौद्धिक जटिलता को एक-से-कई तरह से हस्तांतरित करते हैं, जैसा कि आपके द्वारा ऊपर बताए गए सरल कोड की 3 पंक्तियों में पाठकों और अनुरक्षकों को कोड की 3 लाइनों की तुलना में कहीं अधिक जानकारी को समझने की लागत पर आता है। । यदि आपका गणित पुस्तकालय बदलता है, तो यह आपके कोड को कम स्थिर बनाता है, इसलिए आपका कोड भी बदल सकता है। पुन: उपयोग बहुत कम है और आप बौद्धिक ओवरहेड को भी गुणा करते हैं और आपका कोड केंद्रीय सुधारों से लाभान्वित होना बंद कर देता है, इसलिए यह एक संतुलनकारी कार्य है, लेकिन यह विचार कि यह एक संतुलनकारी कार्य है, जो कि मामूली नकल के हर छोटे रूप पर मुहर लगाने की कोशिश के बाद से उल्लेख के लायक है एक परिणाम के रूप में बनाए रखने के लिए के रूप में मुश्किल है, अगर अधिक नहीं, विपरीत चरम से।
इसमें से बकवास का परीक्षण करें
यह एक दिया गया है, लेकिन यदि आपका कोड सभी इनपुट मामलों को नहीं संभालता है और कुछ बढ़त के मामलों को याद करता है, तो आप दूसरों से यह उम्मीद कैसे कर सकते हैं कि आपने जो कोड लिखा है, उसे बनाए रखने से पहले आप इसे अपनी आंखों और हाथों में स्थानांतरित करने के लिए सही नहीं थे? कोड में परिवर्तन करना काफी मुश्किल है जो पूरी तरह से अकेला कोड काम करता है जो कि पहली जगह में कभी सही नहीं था।
शीर्ष पर, कोड जो पूरी तरह से परीक्षण पास करता है, वह आमतौर पर बदलने के लिए कम कारण खोजने वाला है। यह स्थिरता से संबंधित है जो स्थिरता की तुलना में प्राप्त करने के लिए एक पवित्र कब्र के और भी अधिक है, क्योंकि स्थिर कोड जिसे कभी भी बदलने की आवश्यकता नहीं होती है कोई रखरखाव लागत नहीं होती है।
इंटरफ़ेस प्रलेखन
यदि आप दोनों को दस्तावेजीकरण करने के लिए समान समय नहीं दे सकते हैं तो "क्या चीजें" उन्हें "कैसे करते हैं" को प्राथमिकता दें। एक स्पष्ट इंटरफ़ेस जो सभी संभावित इनपुट मामलों में क्या करेगा (या बहुत कम से कम, क्या करना चाहिए) के बारे में अपने इरादों में स्पष्ट है, अपने स्वयं के कार्यान्वयन के संदर्भ की स्पष्टता पैदा करेगा जो न केवल समझने में मार्गदर्शन करेगा कोड का उपयोग करने के लिए, लेकिन यह भी कि यह कैसे काम करता है।
इस बीच कोड में इन गुणों का अभाव है, जहां लोगों को यह भी पता नहीं है कि यह क्या करना चाहिए, एसओएल कोई बात नहीं है कि इसके कार्यान्वयन के विवरण कितनी अच्छी तरह से प्रलेखित हैं। स्रोत कोड कैसे लागू किया जाता है, इस पर 20-पृष्ठ का मैनुअल उन लोगों के लिए बेकार है जो यह भी पता नहीं लगा सकते हैं कि पहली जगह में इसका उपयोग कैसे किया जाना चाहिए और यह सभी संभावित परिदृश्यों में भी क्या करना चाहिए।
कार्यान्वयन पक्ष के लिए, दस्तावेज़ को प्राथमिकता दें कि आप अन्य सभी से अलग क्या करते हैं। एक उदाहरण के रूप में, इंटेल के पास अपनी रिटररिंग कर्नेल के लिए एक बाउंड वॉल्यूम पदानुक्रम है। चूंकि मैं इस क्षेत्र में काम करता हूं, इसलिए मैं थोक को पहचान सकता हूं कि दस्तावेज़ीकरण के माध्यम से शिफ्ट किए बिना उनका कोड एक नज़र में क्या कर रहा है। हालांकि, वे कुछ अनोखा करते हैं जो बीवीएच को पार करने और रे पैकेट का उपयोग करके समानांतर में चौराहों का प्रदर्शन करने का विचार है । यही कारण है कि मैं उन्हें अपने प्रलेखन को प्राथमिकता देना चाहता हूं क्योंकि कोड के वे हिस्से अधिकांश ऐतिहासिक बीवीएच कार्यान्वयन से विदेशी और असामान्य हैं।
पठनीयता
यह भाग बहुत व्यक्तिपरक है। मुझे वास्तव में इस बात की परवाह नहीं है कि एक तरह की पठनीयता जो मानव विचार प्रक्रियाओं के करीब है। उच्चतम स्तर पर चीजों का वर्णन करने वाला सबसे अच्छी तरह से प्रलेखित कोड अभी भी मेरे लिए पालन करना मुश्किल है अगर लेखक एक समस्या को हल करने के लिए विचित्र और जटिल विचार प्रक्रियाओं का उपयोग करता है। इस बीच 2 या 3 चरित्र नाम का उपयोग कर कोड अक्सर मेरे लिए यह समझना आसान हो सकता है कि क्या तर्क बहुत सीधा है। मुझे लगता है कि आप सहकर्मी की समीक्षा कर सकते हैं और देख सकते हैं कि अन्य लोग क्या पसंद करते हैं।
मैं ज्यादातर रखरखाव और अधिक महत्वपूर्ण बात, स्थिरता में दिलचस्पी रखता हूं। कोड जो बदलने का कोई कारण नहीं ढूंढता है वह शून्य रखरखाव लागत है।