Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> Ruby

जब कोड DRY करना गलत हो जाता है: क्यों रिफैक्टरिंग आपके कोड को काम करना कठिन बना सकती है

"डोंट रिपीट योरसेल्फ" मेरे सॉफ्टवेयर डेवलपमेंट करियर के दौरान पढ़ी गई सबसे मूल्यवान किताबों में से एक से सबसे मूल्यवान विचारों में से एक है। अगर आप डुप्लीकेट कोड को रिफैक्टर करके हटा सकते हैं, तो आप अधिक सामान्य, अधिक स्थिर कोड उत्पन्न करेंगे। जब आप अपने कोड को DRY करना शुरू करते हैं, तो आप कुछ समस्याओं में पड़ने लगेंगे: कोड जो एज केस को अच्छी तरह से हैंडल नहीं करता, कोड जो बहुत सामान्यीकृत है और पढ़ने में कठिन है, या कोड जिसे ढूंढना मुश्किल है। अगर DRYness की ओर रिफैक्टरिंग हर बार काम नहीं करती, तो आप कैसे जानेंगे कि आपको कब रिफैक्टर करना चाहिए?

बहुत ज्यादा DRY कोड इस गलतफहमी से आता है कि आपको किस प्रकार के डुप्लीकेशन को रिफैक्टर करने की कोशिश करनी चाहिए। आपको आवश्यक डुप्लीकेशन और आकस्मिक डुप्लीकेशन के बीच अंतर पहचानने में सक्षम होना चाहिए।

आवश्यक डुप्लीकेशन वह कोड है जो उस समस्या की श्रेणी को हल करता है जिस पर आप काम कर रहे हैं। ये उस प्रकार का डुप्लीकेशन है जिसे आपको तुरंत खत्म करना चाहिए।

आकस्मिक डुप्लीकेशन, हालांकि, हाथ में समस्या से असंबंधित डुप्लीकेशन है, "संयोग से डुप्लीकेशन"। अगर आप आकस्मिक डुप्लीकेशन को बहुत आक्रामक तरीके से साफ करते हैं, तो आप अधिक भंगुर कोड के साथ समाप्त होंगे जिसे नए केस जुड़ने पर अन-रिफैक्टर करना पड़ेगा।

लेकिन आप अंतर कैसे बता सकते हैं? अनुभव के साथ, आप इसमें बेहतर हो सकते हैं, लेकिन दशकों की प्रोग्रामिंग के बाद भी, मैं अभी भी आधे समय भी इसे सही नहीं कर पाता। सौभाग्य से, एक सामान्य नियम है जो बहुत मदद करता है: थ्री स्ट्राइक्स एंड यू रिफैक्टर।

पहली बार जब आप कुछ करते हैं, तो आप बस उसे करते हैं।

दूसरी बार जब आप कुछ समान करते हैं, तो आप डुप्लीकेशन पर झिझकते हैं, लेकिन आप डुप्लीकेट चीज़ वैसे भी करते हैं।

तीसरी बार जब आप कुछ समान करते हैं, तो आप रिफैक्टर करते हैं।

क्या आप देख सकते हैं कि ये क्यों मदद करता है? तीसरी बार तक, आपको पैटर्न दिखना शुरू हो जाने चाहिए। आपको अंदाजा होना चाहिए कि कौन सा डुप्लीकेट कोड आपकी समस्या को हल करने के लिए आवश्यक है, और कौन सा कोड सिर्फ संयोग से समान दिखता है। आप केवल उस कोड को सामान्यीकृत (और DRY अप) करना शुरू कर सकते हैं जो आपके द्वारा हल की जा रही समस्या के सभी उदाहरणों में मूल रूप से समान है।

एक पल लें और उस आखिरी बार के बारे में सोचें जब रिफैक्टरिंग ने आपको दर्द दिया। क्या आप उस चीज़ को DRY करने की कोशिश कर रहे थे जो समस्या की दो कॉपियों के बीच डुप्लीकेट थी, लेकिन तीसरी कॉपी बस थोड़ी अलग थी?

और अगली बार जब आपको लगे कि आपको कुछ कोड डुप्लीकेट करना ही है, तो रिफैक्टर करने से पहले तीसरी कॉपी का इंतजार करने की कोशिश करें। (ये वास्तव में कठिन है और भयानक लगता है, लेकिन अपनी आंखें बंद करके वैसे भी कोशिश करें)। फिर, जैसे ही आप कोड को DRY अप करते हैं, इसके बारे में सोचें। क्या आप अलग तरह से रिफैक्टर कर रहे हैं जितना आपने दूसरी कॉपी लिखने के तुरंत बाद रिफैक्टर किया होता?

  1. फायरवॉल क्या है और इसका उद्देश्य क्या है? फायरवॉल क्या है और इसका उद्देश्य क्या है?

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

  1. Windows 10 Meet Now क्या है और इसे कैसे हटाएं Windows 10 Meet Now क्या है और इसे कैसे हटाएं

    क्या आपने हाल ही में Windows 10 संस्करण 20H2 में अपडेट किया है? आपने अपने सिस्टम ट्रे में एक नया फीचर देखा होगा। Meet Now बटन Windows 10 का Zoom का जवाब है और सीधे तौर पर आपको आसानी से वीडियो कॉन्फ्रेंस करने में मदद करने के उद्देश्य से है। यहां Windows 10 Meet Now के बारे में वह सब कुछ है जो आपको जा

  1. RuboCop के साथ Ruby कोड गुणवत्ता सुधारें: लिंटिंग और ऑटो-फॉर्मेटिंग RuboCop के साथ Ruby कोड गुणवत्ता सुधारें: लिंटिंग और ऑटो-फॉर्मेटिंग

    लिंटिंग प्रोग्रामेटिक और स्टाइलिस्टिक त्रुटियों के लिए सोर्स कोड की स्वचालित जांच है। यह जांच एक स्थैतिक कोड विश्लेषण टूल द्वारा की जाती है जिसे लिंटर कहा जाता है। एक कोड फॉर्मेटर, हालांकि, एक ऐसा टूल है जो सोर्स कोड को फॉर्मेट करने से संबंधित है ताकि यह पूर्व-कॉन्फ़िगर नियमों के सख्ती से पालन करे।