क्या ऐसे मामले हैं जहां अधिक संक्षिप्त कोड (अधिक तार्किक बयानों में) अधिक संक्षिप्त कोड की तुलना में अधिक साफ है?
क्या ऐसे मामले हैं जहां अधिक संक्षिप्त कोड (अधिक तार्किक बयानों में) अधिक संक्षिप्त कोड की तुलना में अधिक साफ है?
जवाबों:
इसका उत्तर देने के लिए, आइए एक वास्तविक विश्व उदाहरण लेते हैं जो मेरे साथ हुआ। C # में एक पुस्तकालय जिसे मैं बनाए रखता हूं, मेरे पास निम्नलिखित कोड था:
TResult IConsFuncMatcher<T, TResult>.Result() =>
TryCons(_enumerator) is var simpleMatchData && !simpleMatchData.head.HasValue
? _emptyValue.supplied
? _emptyValue.value
: throw new NoMatchException("No empty clause supplied");
: _recursiveConsTests.Any()
? CalculateRecursiveResult()
: CalculateSimpleResult(simpleMatchData);
साथियों के साथ इस पर चर्चा करते हुए, सर्वसम्मति से निर्णय लिया गया था कि नेस्टेड टर्नरी अभिव्यक्तियाँ, "चतुर" प्रयोग के साथ युग्मित is var
थीं, जिसके परिणामस्वरूप कोड पढ़ना मुश्किल था।
तो मैं इसे करने के लिए:
TResult IConsFuncMatcher<T, TResult>.Result()
{
var simpleMatchData = TryCons(_enumerator);
if (!simpleMatchData.head.HasValue)
{
return _emptyValue.supplied
? _emptyValue.value
: throw new NoMatchException("No empty clause supplied");
}
return _recursiveConsTests.Any()
? CalculateRecursiveResult()
: CalculateSimpleResult(simpleMatchData);
}
मूल संस्करण में निहित के साथ सिर्फ एक यौगिक अभिव्यक्ति थी return
। नए संस्करण में अब एक स्पष्ट चर घोषणा, एक if
कथन और दो स्पष्ट शामिल हैं returns
। इसमें अधिक स्टेटमेंट और कोड की अधिक लाइनें शामिल हैं। फिर भी मैंने जिस किसी से भी सलाह ली, उसे पढ़ना और तर्क करना आसान समझा, जो "क्लीन कोड" के प्रमुख पहलू हैं।
तो आपके प्रश्न का उत्तर एक जोरदार "हां" है, संक्षिप्त क्रिया संक्षिप्त कोड की तुलना में अधिक साफ हो सकती है और इस प्रकार एक मान्य रीफैक्टरिंग है।
!
शर्त को हटा दिया जाए । मैं दूसरा रिटर्न एक में डालने का सुझाव भी दूंगा else
। लेकिन जैसा कि यह खड़ा है, यह एक बड़े पैमाने पर सुधार है।
if (!foo.HasValue)
आपके कोड में एक मुहावरा है, तो और भी अधिक दृढ़ता से। हालांकि if
यह वास्तव में बाहर निकलने की जल्दी नहीं है - यह एक "यह या वह निर्भर करता है।"
1. LOC और कोड गुणवत्ता के बीच संबंध का अभाव।
रिफैक्टरिंग का लक्ष्य कोड के एक टुकड़े की गुणवत्ता में सुधार करना है।
LOC एक बहुत ही बुनियादी मीट्रिक है, जो कभी-कभी, कोड के एक टुकड़े की गुणवत्ता के साथ संबद्ध होती है: उदाहरण के लिए, कुछ हजारों LOC के साथ एक विधि में गुणवत्ता के मुद्दे होने की संभावना है। हालांकि, यह ध्यान दिया जाना चाहिए कि एलओसी एकमात्र मीट्रिक नहीं है, और कई मामलों में गुणवत्ता के साथ सहसंबंध का अभाव है। उदाहरण के लिए, एक 4 एलओसी विधि जरूरी नहीं कि 6 एलओसी विधि की तुलना में अधिक पठनीय या अधिक बनाए रखने योग्य हो।
2. कुछ रिफैक्टिंग तकनीकों में LOC को शामिल करना शामिल है।
यदि आप रिफैक्टिंग तकनीकों की सूची लेते हैं , तो आप आसानी से उन लोगों को स्पॉट कर सकते हैं जो जानबूझकर एलओसी जोड़ रहे हैं । उदाहरण:
दोनों बहुत ही उपयोगी रिफैक्टरिंग तकनीक हैं, और एलओसी पर उनका प्रभाव पूरी तरह से अप्रासंगिक है जब यह विचार करना कि उनका उपयोग करना है या नहीं।
LOC के उपयोग से बचें।
LOC एक खतरनाक मीट्रिक है। इसे मापना बहुत आसान है, और सही ढंग से व्याख्या करना बहुत मुश्किल है।
जब तक आप कोड गुणवत्ता की माप की तकनीकों से परिचित नहीं हो जाते, तब तक एलओसी को पहले स्थान पर मापने से बचें। अधिकांश समय, आपको कुछ भी प्रासंगिक नहीं मिलेगा, और ऐसे मामले होंगे जहां यह आपको अपने कोड की गुणवत्ता को कम करने में गुमराह करेगा।
यदि आप अपने स्रोत कोड की बाइट गिनती या एलओसी की संख्या को कम से कम करना चाहते हैं, तो स्टैक एक्सचेंज कोड गोल्फ साइट की प्रस्तुतियाँ देखें ।
यदि आपका स्रोत कोड इस तरह से कम हो गया है, तो आपके पास जल्द ही एक अप्रत्याशित गड़बड़ होगी। यहां तक कि अगर आप ऐसे व्यक्ति हैं, जिन्होंने इस तरह का कोड लिखा है, और उस समय इसे पूरी तरह से समझते हैं, तो जब आप छह महीने के समय में इसे वापस लेते हैं, तो आप कितने कुशल होंगे? इस बात का कोई सबूत नहीं है कि ऐसा न्यूनतम कोड वास्तव में किसी भी त्वरित कार्य को अंजाम देता है।
कोड इस तरह से लिखा जाना चाहिए कि आपकी टीम का कोई भी सदस्य इसे देख सके, और समझ सके कि यह क्या कर रहा है।
हां रीफैक्टरिंग निश्चित रूप से कोड की अधिक लाइनों में परिणाम कर सकता है।
सबसे आम मामला IMO है जब आप कोड लेते हैं जो सामान्य नहीं है और आप इसे अधिक सामान्य / लचीला बनाते हैं । कोड उत्पन्न करना आसानी से कोड की पंक्तियों में काफी वृद्धि करता है (कभी-कभी दो या अधिक के कारक द्वारा)।
यदि आप नए जेनेरिक कोड को लाइब्रेरी के रूप में दूसरों (केवल एक आंतरिक सॉफ्टवेयर घटक के बजाय) द्वारा उपयोग किए जाने की उम्मीद करते हैं तो आप आमतौर पर एकतरफा कोड और इन-कोड प्रलेखन मार्कअप जोड़ते हैं जो कोड की लाइनों को फिर से बढ़ाएगा।
उदाहरण के लिए, यहां एक बहुत ही सामान्य परिदृश्य है जो प्रत्येक सॉफ़्टवेयर डेवलपर के लिए होता है:
कुछ ठोस उदाहरण जो मेरे सिर के ऊपर से मेरे पास आते हैं: