अपने स्रोत में व्यर्थ कोड


34

मैंने सीनियर कोडर्स से इसकी कहानियां सुनी हैं और मैंने इसमें से कुछ को खुद देखा है। ऐसा लगता है कि प्रोग्रामर के कुछ से अधिक उदाहरण हैं जो व्यर्थ कोड लिखते हैं। मैं चीजों को देखूंगा:

  • विधि या फ़ंक्शन कॉल जो मूल्य का कुछ भी नहीं करते हैं।
  • निरर्थक जाँच एक अलग वर्ग फ़ाइल, वस्तु या विधि में की जाती है।
  • if कथन जो हमेशा सच्चे का मूल्यांकन करते हैं।
  • थ्रेड्स जो स्पिन करते हैं और नोट का कुछ भी नहीं करते हैं।

कुछ लोगों का नाम बताने के लिए। मुझे बताया गया है कि ऐसा इसलिए है क्योंकि प्रोग्रामर जानबूझकर कोड को संगठन के लिए अपने स्वयं के लायक बनाने के लिए भ्रमित करना चाहते हैं या संविदात्मक या आउटसोर्स किए गए काम के मामले में बार-बार व्यापार करना सुनिश्चित करते हैं।

मेरा सवाल यह है कि। किसी और को इस तरह कोड देखा है? आपका निष्कर्ष क्या था क्यों उस कोड था?

अगर किसी ने इस तरह का कोड लिखा है, तो क्या आप साझा कर सकते हैं?


4
if (false) {...}ब्लॉक कोड टिप्पणी करने के लिए महान हैं! </ कटाक्ष>
dlras2

18
दुर्भावना के लिए कभी भी विशेषता न रखें जो कि मूर्खता द्वारा पर्याप्त रूप से समझाया जाता है , विशेष रूप से सॉफ्टवेयर विकास में जहां अस्थायी त्वरित हैक शायद ही कभी अस्थायी होते हैं।
Wildpeaks

1
@ dlras2 प्लॉट ट्विस्ट: #DEFINE झूठा सच :)
सिल्वीयू बर्किया

जवाबों:


17

मैंने उन डेवलपर्स को सुना है जो अपनी कोडिंग उपलब्धियों को अधिक जटिल बनाने की कोशिश करते हैं, वे वास्तव में अधिक जटिल हैं। मैंने कभी किसी को यह नहीं सुना है, लेकिन मैंने ऐसा कोड देखा है जो आपके मानदंडों को पूरा करता है जो जानबूझकर जल्दबाजी या खराब प्रथाओं से बना था और तोड़फोड़ नहीं। विकृत कोड के आसपास के कोड को उस बिंदु पर बदल दिया गया हो सकता है जहां कोई विशेष फ़ंक्शन अब उपयोगी नहीं है।

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


2
मैं आपको इस मामले में सही जवाब देने के लिए इच्छुक हूं क्योंकि कुछ कोड जो मैं देख रहा हूं, वे अनजाने में नहीं हो सकते ... तब तक नहीं जब तक कोई उच्च नहीं था जब उन्हें कोडित किया गया था और सोचा था कि यह सिर्फ मजाकिया होगा! मेरा मानना ​​है कि अन्य लोगों के पास बेकार कोड के लिए भी प्रासंगिक कारण हैं, लेकिन मैं जो कोड देख रहा हूं वह उन परियोजनाओं पर है जिन पर कुछ लोगों ने काम किया है और मैं इस पर काम करने वाले मूल विकास दल के बाहर पहला व्यक्ति हूं। मुझे यह कहना है कि ऐसा लगता है जैसे जटिलता का मामला सदमे और खौफ में जोड़ा गया है।
अली

18
@ अली: कभी भी दुर्भावना के लिए विशेषता नहीं है जो अक्षमता से बेहतर समझा जाता है। दूसरे शब्दों में - कोड शायद इस तरह की गड़बड़ी के लिए विकसित हुआ क्योंकि वास्तव में इसे देखने के लिए और वास्तव में यह क्या करता है यह देखने के लिए समय बिताने के लिए कोई भी बहादुर नहीं था। यह सभी त्वरित सुधारों के एक समूह की तरह लगता है, जब तक कि सभी बचे हुए, बत्तख का गुच्छा नहीं है।
जल्दी से जल्दी

1
@Quickly_now के लिए +1। कि आमतौर पर क्या हो रहा है; हर कोई किसी भी चीज़ को छूने से डरता है जो इसे तोड़ने के डर से "काम करता है" (या, स्वर्ग न करे, वास्तव में कोड को बेहतर बनाने के लिए एक काम पर ले जा रहा है! आतंक!)। इसलिए कोड सड़ता है और त्यौहार होता है और अंत में सड़क से कई साल नीचे गिर जाते हैं।
वेन मोलिना

@ आलिया, ऐसे मामले सामने आए हैं जब ऐसा लगता है कि कोड को सबसे अधिक अर्थपूर्ण और वाजिब बताया गया है क्योंकि मुझे लगता है कि यह हास्यास्पद है या दिखावा है। और इसके विपरीत कुछ अन्य लोगों के कोड देखकर मेरे साथ। आप कभी नहीं जानते कि कौन पागल है, और ज्यादातर समय यह सिर्फ अनुभव और वरीयताओं के लिए नीचे आता है। (यहाँ बुरी तरह से बुरे कोड के बारे में बात नहीं कर रहे हैं, बस इस तरह के विवरण आसानी से चारों ओर फेंक दिए जाते हैं)
मिहेल मैलोस्टानिडिस

73

मैंने इस तरह कोड नहीं देखा है, लेकिन मैंने उस कोड को देखा है जो अन्य कारणों से व्यर्थ दिखता है या व्यर्थ है:

  1. अनिच्छुक अनुकूलता। आपको चीजों को करने का बहुत बेहतर तरीका मिला, लेकिन आपको पुराने (और अब तक बहुत उपयोगी नहीं) एपीआई / फ़ंक्शन को रखना होगा क्योंकि कुछ तृतीय-पक्ष मॉड्यूल बाहर कुछ के लिए इस एपीआई / फ़ंक्शन का उपयोग कर सकते हैं। भले ही फ़ंक्शन कुछ भी उपयोगी नहीं करता है, इसके अभाव में कुछ कोड टूट सकते हैं।

  2. रक्षात्मक कोडिंग। आप जानते हैं कि इस कोड में चेक बेकार हैं क्योंकि यह पहले ही कहीं और चेक किया गया था। लेकिन क्या होगा अगर कोई इसे कहीं और कोड में बदलाव करता है और चेक को हटाता है या बदलता है ताकि वे आपके पूर्व शर्त से मेल न खाएं?

  3. जैविक विकास। बड़ी परियोजनाओं में, कई वर्षों में कई चीजें बदल जाती हैं, और यह कुछ तरीकों को बदल देती है, जिनका उपयोग पहले कभी नहीं किया गया था, लेकिन किसी ने उन्हें हटाने की जहमत नहीं उठाई क्योंकि किसी ने भी इस बात का ध्यान नहीं रखा कि इस विशिष्ट पद्धति का उपयोग किया जाता है या नहीं, उन्होंने सिर्फ रिफैक्ट किया कोड के उनके टुकड़े और संयोग से यह हुआ कि वे सभी इस पद्धति का उपयोग करने के लिए रुक गए। या ऐसी स्थितियां जो एक बार अर्थ रखती थीं लेकिन अन्य स्थानों पर आवेदन को रद्द कर दिया गया था ताकि स्थिति हमेशा सही हो जाए लेकिन किसी ने इसे हटाने की जहमत नहीं उठाई।

  4. ओवर-डिजाइनिंग। लोग कुछ चीजों को कोड कर सकते हैं "बस अगर हमें इसकी आवश्यकता होती है" और वास्तव में कभी भी इसकी आवश्यकता नहीं होती है। जैसे "चलो एक धागा स्पॉन करें अगर हमें कुछ काम ऑफलाइन करना होगा" और फिर कोई भी ऑफलाइन कुछ भी करने के लिए नहीं कहता है और प्रोग्रामर इसके बारे में भूल जाता है और अन्य प्रोजेक्ट्स (या शायद किसी अन्य कंपनी) में चला जाता है और वह कोड वहां रहता है हमेशा के लिए क्योंकि कोई नहीं जानता कि यह वहां क्यों है या यदि इसे हटाने के लिए सुरक्षित है।

इसलिए जब मैंने इसे नौकरी की सुरक्षा के प्रति दुर्भावना या पथभ्रष्ट दृष्टिकोण से बाहर नहीं देखा है, मैंने कई बार देखा है जब यह सॉफ्टवेयर विकास के प्राकृतिक परिणाम के रूप में होता है।


22
मुझे लगता है कि # 3, कार्बनिक विकास ने बेकार के एक बड़े हिस्से को समझा दिया है जो मैंने नौकरी पर देखा है। लेकिन इन सभी कारणों में से 4 एक बुद्धिमान प्रोग्रामर मानते हैं। कुछ बेकार कोड किसी को समझ में नहीं आता है कि क्या होने की जरूरत है, और क्या नहीं करता है, और कोड का एक बहुत कुछ छोड़ने के डर से विशुद्ध रूप से बदल रहा है कि किस तरह का काम करता है।
ब्रूस एडिगर

2
मैंने अपने प्रोजेक्ट में # 4 देखा है: अक्सर यह कंपनी के अंदर अधिक शक्ति रखने के उद्देश्य से नहीं किया जाता है, बल्कि ऐसे लोग होते हैं जो हमेशा एक अधिक सामान्य समाधान बनाने की कोशिश करते हैं, भले ही इसकी आवश्यकता न हो। # 2 के बारे में, मैंने स्वयं को आपके द्वारा बताए गए कारणों के लिए बहुत अधिक उपयोग किया है: IMHO यहां तक ​​कि सबसे छोटे फ़ंक्शन या विधि को कोई धारणा नहीं बनाना चाहिए कि बाकी कोड कैसे काम करता है या बदल जाएगा। इसके बजाय, मेरा कोड सरल पैटर्न का अनुसरण करता है: "यदि इनपुट ठीक है तो आउटपुट और त्रुटि"। यह निर्भरता को कम करने के सामान्य डिजाइन सिद्धांत का अनुसरण करता है।
जियोर्जियो

3
आप यह भी भूल गए: बुरे डेवलपर्स। कुछ लोग जो कोड लिख रहे हैं, उन्हें नहीं होना चाहिए, और कई दुकानों में अच्छी समीक्षा प्रक्रिया मौजूद नहीं है।
जो

20

मेरा सवाल यह है कि। किसी और को इस तरह कोड देखा है? आपका निष्कर्ष क्या था क्यों उस कोड था?

1) हाँ।

2) मेरे द्वारा देखे गए मामलों में, मैं इसे नीचे रखूंगा:

  • प्रोग्रामर अनुभवहीनता
  • प्रोग्रामर एक विशेष रूप से जटिल और / या खराब निष्पादित डिजाइन को नहीं समझ रहा है जिसे वह संशोधित करने का प्रयास कर रहा है
  • प्रोग्रामर एक रिफ्लेक्टर के (बीच में) बाधित हो रहा है।
  • लापरवाही

अब शायद मैं इसके बारे में धर्मार्थ हो रहा हूं, लेकिन मेरा सामान्य दृष्टिकोण यह है कि इन बातों के बारे में क्षमा / गैर-टकराव से बेहतर है, उंगलियों को इंगित करने और खराब गुणवत्ता के बारे में ले जाने के बजाय। जाहिर है, चीजें बहुत खराब हो सकती हैं कि कुछ करना होगा , लेकिन सही दिशा में एक कोमल कुहनी आमतौर पर पर्याप्त होती है।

यदि गुणवत्ता / गलतियाँ "व्यवसाय" को गंभीरता से प्रभावित करने वाली हैं, तो निश्चित रूप से, आप इस तरह के लाईसेज़-फेयर दृष्टिकोण को नहीं अपना सकते। लेकिन उस स्थिति में आपको एक व्यापक परीक्षण प्रक्रिया के साथ, हर चीज की अनिवार्य और परिश्रमी कोड समीक्षाओं की आवश्यकता होती है।


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

IMO, यह उत्पादक नहीं है, और अपने सहकर्मियों के साथ अच्छे काम के रिश्ते के लिए अनुकूल नहीं है।


+1 एक प्रतिक्रिया टाइप कर रहा था और पाया कि आपने जिन सभी कारणों का उल्लेख करने जा रहे हैं, उन्हें बहुत सूचीबद्ध किया है।
कनाडा

धर्मार्थ होने के लिए +1। उंगलियों को इंगित किए बिना किसी की गलतियों को ठीक करें और आपके सहयोगी आपके तकनीकी कौशल और आपके लोगों के कौशल दोनों का सम्मान करेंगे। लेखक को उनके भद्दे कोड के लिए परेशान करें और आपके सहयोगी आपके दृष्टिकोण पर नाराजगी जताएंगे और आपकी क्षमताओं को छूट देंगे।
कालेब

13

उन सभी में अक्सर लक्षण होते हैं कि कैसे एक परियोजना की उम्र होती है।

 1. विधि या फ़ंक्शन कॉल जो मूल्य का कुछ भी नहीं करते हैं। बहुत बार होते हैं जब कुछ कोड बस के रूप में छोड़ दिया जाता है (उम्मीद है कि एक बड़ी पदावनत चेतावनी के साथ, लेकिन चूंकि अधिकांश भाषाओं में यह चेतावनी नहीं है, इसका हमेशा पालन नहीं किया जाता है ...) क्योंकि, एक बिंदु पर यह कुछ काम करता है वास्तविक उद्देश्य और कोई भी नहीं जानता था कि अगर अपमानजनक रेखाएं हटा दी जाएं तो क्या हो सकता है।

मुझे लगता है कि यह एक डेडवाफ्ट से याद है:

@deprecated // he might have been crazy enough to use reflection...
boolean getTrue() {
    return false; 
}

 2. एक अलग वर्ग फ़ाइल, वस्तु या विधि में किया गया निरर्थक चेक। संचार की परतें भी अपूर्ण हैं (कभी-कभी पौराणिक मानव महीना पढ़ें; यदि नहीं, तो आप कंप्यूटर पर क्या कर रहे हैं?! जाओ! READ।)। अक्सर, एक व्यक्ति कुछ पर काम करेगा और फिर परियोजना को छोड़ देगा, और फिर अगले आदमी, कुछ विचित्र बग को ढूंढते हुए, इसे खत्म करने की कोशिश करने के लिए यहां और वहां एक अतिरिक्त जांच फेंकता है। जब बग को हटा दिया जाता है, तो चेक इसलिए नहीं होते हैं, क्योंकि अगर यह टूटा नहीं है, तो इसे ठीक न करें।

 3. यदि कथन जो हमेशा सत्य का मूल्यांकन करते हैं। ओह, मैं यह कर चुका हूं। मुझे एक बार एक प्रोजेक्ट मिला, इसमें शायद १०-१५ की एक श्रृंखला थी / यदि अन्य ब्लॉक। व्यवहार को बदलने के लिए, मैंने बस true||पहले ब्लॉक पर रखा । यह महीनों (वर्षों) तक नहीं था कि बाद में मैं वापस आया और कहा, "ओह, वाह, इस कोड को नष्ट कर दिया गया था लेकिन कभी नहीं था"

 4. थ्रेड्स जो स्पिन करते हैं और नोट के कुछ भी नहीं करते हैं। मैं इस तरह से विचार करने की एक पंक्ति की कल्पना कर सकता हूं:

  1. मुझे पता है! मैं इन दो समस्याओं को असंगत रूप से संभाल सकता हूं! मैं धागे फू और बार बनाऊंगा।
  2. (दो महीने बाद) हुह, तुम्हें पता है, बार से कार्यक्षमता फू में थोड़ी बेहतर है। मैं कुछ खत्म कर दूंगा।
  3. (एक साल बाद) आप जानते हैं, इस अन्य सामान को बार से फू में डालने से समझ में आता है।
  4. (कई, कई साल बाद) "अरे, यह barधागा ऐसा नहीं लगता है कि यह कुछ भी कर रहा है, क्या हम इसे हटा सकते हैं?" "बेहतर नहीं, यह कई, कई वर्षों से है ..."

5
+1 के लिए "बेहतर नहीं, यह कई, कई वर्षों से है ..." - यह बार-बार होता है। परिणामों के डर के कारण हटाने का डर ("हम कैसे परीक्षण करते हैं कि हमने कुछ नहीं तोड़ा" - खासकर अगर आसपास कोई इकाई नहीं है)।
जल्दी से जल्दी

11

मैं थोड़ा अधिक आशावादी हूं। मुझे लगता है कि आपने जो वर्णन किया है वह अक्सर तब होता है जब कोड लापरवाही से हटा दिया जाता है।


13
यद्यपि यह कठिन है, कभी भी Malice के लिए विशेषता नहीं है जिसे स्टुपिडिटी द्वारा समझाया जा सकता है।
ब्रूस एडिगर

8

पुराने साथियों ने मुझे उस समय के बारे में बताया जब सलाहकारों ने भुगतान किया था ने कोड की लाइनों की संख्या का था। और इसलिए उन्होंने आश्चर्यजनक रूप से लंबे-घुमावदार निर्माणों का उपयोग करके लाभ को अधिकतम किया।

आजकल मैं हमेशा मानता हूं कि आदमी काम करते हुए भी भाषा सीख रहा है। और वह जल्दी में है।


अपना चेहरा काटने के लिए अपनी नाक काटने की बात करें। मुझे लगता है कि यह ठीक है अगर आपको फिर से कोड को देखने की ज़रूरत नहीं है।
जेएफओ

6

अधिकांश उत्तर इन दो सरल तथ्यों को उबालते हैं:
[1] कोड कोड के इतिहास को दर्शाता है, और
[2] कोड कोड के अपेक्षित भविष्य को दर्शाता है।

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

मैंने लिखा है अगर-कथन, AT PRESENT, हमेशा सही का मूल्यांकन करता है। लेकिन शायद अतीत में यह गलत हो सकता है।

निरर्थक जाँच के रूप में, हे, मुझे दूसरे कोड पर भरोसा नहीं है, मुझे अपने कोड पर भी भरोसा नहीं है। यदि एक मॉड्यूल एन 1 या 2 या 3 पर निर्भर करता है, तो यह अच्छी तरह से बेहतर हो जाता है, और यह जानकारीपूर्ण रूप से दुर्घटनाग्रस्त हो जाता है अगर ऐसा नहीं है। यह मॉड्यूल बी के लिए गैरकानूनी है क्योंकि विस्फोट करने के लिए मॉड्यूल ए खराब हो गया है; मॉड्यूल बी को यह शिकायत करने के लिए काफी वैध है कि मॉड्यूल ए ने खराब कर दिया है। और याद रखें कि, अगले महीने, वह पैरामीटर जैसा कि अभी तक अलिखित मॉड्यूल सी से आ रहा है।


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

1
अगर (भाषा = 'एन' या भाषा = थ ') - शायद अगले महीने हम चीनी कोशिश करें? अगर (isset ($ TITLE)) - सभी मॉड्यूल $ TITLE सेट करने के लिए SUPPOSED हैं, लेकिन हो सकता है कि किसी दिन किसी ने इसे गलत बताया हो। अगर (file_exists ($ TARGET)) - अच्छे कोड ने फ़ाइल पहले ही बना ली होगी, लेकिन हो सकता है कि कोई सिस्टम त्रुटि हो और यह निर्मित नहीं हुई। मेरा मानक PHP / MySQL इंटरफ़ेस कोड हमेशा त्रुटि के लिए जाँच करता है, भले ही मैंने अभी तक किसी को पकड़ा नहीं है।
एंडी कैनफील्ड

3

मैंने इसे कुछ बार देखा है, वास्तव में कल ही, मुझे अपने कुछ बॉस कोड को अपने नए ऐप में मर्ज करने के लिए मिला है। उनके मामले में यह कौशल और समझ की सामान्य कमी के लिए नीचे है और विश्वास है कि वह सोचता है कि वह काफी कुशल डेवलपर है।

'विधि या फ़ंक्शन कॉल जो मूल्य का कुछ भी नहीं करते हैं।' और 'यदि कथन जो हमेशा सत्य का मूल्यांकन करते हैं' उनके कोड के साथ एक प्रमुख मुद्दा है।


3

मुझे संदेह है कि हालांकि कई लोगों ने कोड देखा है कि ये मुद्दे हैं, कुछ ही लिखने के लिए उपहास करेंगे । सभी संभावना में, आप जो देख रहे हैं वह संचित सॉफ्टवेयर सड़ रहा है - कोई व्यक्ति कुछ जोड़ता है, जो वास्तव में काम नहीं करता है, अगला अनुचर सुरक्षा कोड को श्रृंखला में आगे जोड़ता है जो उस स्थिति के खिलाफ गार्ड है जो पहले ठीक से जाँच नहीं की गई थी स्थान; तब किसी को एक समस्या रिपोर्ट मिलती है और एक समस्या के विशिष्ट उदाहरण के खिलाफ और भी अधिक कवच जोड़ता है; एक अन्य व्यक्ति अधिक सामान्य जांच जोड़ता है और पहले जोड़े गए कुछ पुराने कोड को हटाने के लिए भूल जाता है जो अधिक विशिष्ट लक्षणों से निपटते हैं, आदि।

फिर कोड सफाई की समस्या है: मृत कोड प्रतीत होता है को हटाने के लिए कोई विशेष प्रोत्साहन नहीं है, और जबरदस्त प्रोत्साहन ऐसा करने के लिए नहीं है, क्योंकि यदि आप कोड को पूरी तरह से नहीं समझते हैं, तो आपका मूल्यांकन कोड "मृत" होगा। त्रुटिपूर्ण हो, और आप सिस्टम को तोड़ देंगे।


2
  • विधि या फ़ंक्शन कॉल जो मूल्य का कुछ भी नहीं करते हैं।

जरूरी नहीं कि बुरा ही हो। बेस क्लास के तरीके अक्सर खाली तरीकों को कहते हैं जो उपवर्गों के लिए ओवरराइड बिंदुओं के रूप में होते हैं। उदाहरण: कोको टच के यूआईवीवाईई में एक -didAddSubview:विधि है जिसे डिफ़ॉल्ट संस्करण में कुछ भी नहीं करने के रूप में प्रलेखित किया गया है। UIView की -addSubview:विधि को कॉल करना है -didAddSubview:भले ही यह कुछ भी नहीं करता है क्योंकि उप-वर्ग कुछ करने के लिए इसे लागू कर सकते हैं। ऐसे तरीके जो कुछ भी नहीं करते हैं और उनके लिए कारण निश्चित रूप से प्रलेखित होने चाहिए।

यदि कोई खाली या बेकार कार्य / विधि स्पष्ट रूप से ऐतिहासिक कारणों से है, तो इसे बढ़ाया जाना चाहिए। यदि आप सुनिश्चित नहीं हैं तो अपने स्रोत कोड रिपॉजिटरी में कोड के पुराने संस्करणों को देखें।

  • निरर्थक जाँच एक अलग वर्ग फ़ाइल, वस्तु या विधि में की जाती है।

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

  • यदि कथन जो हमेशा सत्य का मूल्यांकन करते हैं।

इसमें एक बड़ा अंतर है:

if (1) {
    // ...
}

तथा:

if (foo() == true) {
    // ...
}

जहां foo()हमेशा लौटता है true

पहला मामला तब होता है जब लोग डिबेट कर रहे होते हैं। if (0) {...जब आप बग को अलग करने का प्रयास कर रहे हों, तब अस्थायी रूप से कोड का एक हिस्सा निकालने के लिए उपयोग करना आसान होता है , और फिर उस कोड को पुनर्स्थापित करने के 0लिए 1इसे बदल दें । आपके द्वारा ifकिए जाने के बाद, एक बार हटा दिया जाना चाहिए, लेकिन उस चरण को भूलना या एक या दो को याद करना आसान है यदि आपने इसे कई स्थानों पर किया है। (इस तरह की सशर्तियों को एक टिप्पणी के साथ पहचानना एक अच्छा विचार है जिसे आप बाद में खोज सकते हैं।) एकमात्र नुकसान यह भ्रम है जो भविष्य में हो सकता है; यदि कंपाइलर संकलन समय पर स्थिति का मूल्य निर्धारित कर सकता है, तो वह इसे पूरी तरह से हटा देगा।

दूसरा मामला स्वीकार्य हो सकता है। यदि foo()कोड में कई स्थानों से परीक्षण की जाने वाली आवश्यकताओं का प्रतिनिधित्व किया जाता है, तो इसे एक अलग फ़ंक्शन या विधि में विभाजित करना अक्सर सही काम foo()होता है, भले ही वह हमेशा सही हो। यदि यह बोधगम्य है जो foo()अंततः वापस आ सकता है false, तो उस स्थिति को किसी विधि या फ़ंक्शन में अलग करना उन सभी स्थानों की पहचान करने का एक तरीका है जहां कोड उस स्थिति पर निर्भर करता है। हालांकि , ऐसा करने से कुछ जोखिम पैदा होता है कि foo() == falseहालत बेकार हो जाएगी और बाद में समस्याएं हो सकती हैं; समाधान यह सुनिश्चित करने के लिए है कि आप इकाई परीक्षण जोड़ते हैं जो स्पष्ट रूप से falseमामले का परीक्षण करते हैं ।

  • थ्रेड्स जो स्पिन करते हैं और नोट का कुछ भी नहीं करते हैं।

यह इतिहास की एक कलाकृति की तरह लगता है, और कुछ ऐसा जिसे कोड समीक्षा के दौरान या सॉफ्टवेयर की आवधिक रूपरेखा के माध्यम से पहचाना जा सकता है। मुझे लगता है कि इसे जानबूझकर बनाया जा सकता है, लेकिन मेरे पास एक कठिन समय है जो यह कल्पना करता है कि कोई वास्तव में ऐसा करेगा।


1

होता है। अक्सर वास्तव में।

कभी-कभी ये कोडिंग डेड-एंड पुराने बकरी-ट्रेल्स की तरह अधिक होते हैं, जो तब फैल जाते हैं जब उनके चारों ओर अधिक कुशल / आधुनिक / शीघ्र फ्रीवे स्थापित किया गया होता है।

अन्य अवसरों पर (और मैं शायद इसका दोषी हूं), वे सॉफ़्टवेयर के विस्तार के लिए नींव हैं जब एक संक्षिप्त, लेकिन सुविधाओं / कार्यों के अपुष्ट सेट का अनुरोध किया जाता है। (कभी-कभी शुरुआती निर्माण प्रदान करने वाले हैंडल में थोड़ा सा काम करना और बाद के काम के लिए पसंद करना, जिसे आप "बोल्ट-ऑन" करने की योजना बनाते हैं, जीवन को आसान बना सकते हैं, जब ऐसा होता है, या अधिक कठिन / गड़बड़ होता है अगर आगे काम नहीं करता है चुकना।)

और, इसका सीधा कारण पुराने के कारण है "यदि यह टूट नहीं गया है, तो इसे फिट न करें।" कभी-कभी कोड को फाड़ने से आपको समझ में नहीं आता है, या विश्वास नहीं किया जाता है, "बटरफ्लाई प्रभाव" के प्रोग्रामिंग संस्करण का कारण बन सकता है। एक या दो बार भी ऐसा हुआ है।


1

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


0

मुझे if trueउन बिंदुओं पर आपत्ति है जिन्हें अंधाधुंध "निरर्थक कोड" के रूप में वर्गीकृत किया गया है।

if (1) { ... }सी कोड में एक ब्लॉक का उपयोग करने के लिए एक वैध मामला है जो या तो सी मानक के साथ संगत होना चाहता है जो फ़ंक्शन की शुरुआत में होने वाली चर परिभाषाओं पर जोर देता है, या बस चाहता है कि स्थानीय चर को यथासंभव स्थानीय रूप से परिभाषित किया जाए।

switch (i) {
    case 23:
        if (1) {
            /* I can declare a local var here! */
        }
        break;
}

5
'अगर (1)' की कोई आवश्यकता नहीं है, तो सिर्फ ब्लॉक क्यों नहीं है?
अंजीर

3
C / C ++ और C # दोनों, और मुझे पूरा यकीन है कि जावा (साथ ही कई अन्य समान भाषाओं की संभावना है) अनाम विवरण ब्लॉक की अनुमति देता है; कोई एक के लिए की जरूरत if, whileया इसी तरह के निर्माण। यह बहुत साफ होने की संभावना नहीं है, लेकिन यह निश्चित रूप से भाषा की युक्ति के अनुसार अनुमत है।
एक CVn

0

मेरे एक प्रोफेसर ने एक दिन हमें एक कहानी से संबंधित बताया कि एक पिछला नियोक्ता उन्हें उन पंक्तियों के आधार पर भुगतान करेगा जो उन्होंने पूरी की थी। इसलिए, उन्होंने कई बहु-दर्जन पंक्तिबद्ध कार्य लिखे जिन्हें कभी नहीं बुलाया गया था। व्यर्थ कोड लिखने के लिए एक महान कारण की तरह लगता है।


0

जैसा कि @Andy ने उल्लेख किया है, मैंने देखा है कि एक बड़ा घटक YAGNI को तोड़ रहा है ।

किसी ने इस धारणा के साथ शुरू किया कि सभी तत्वों के बजाय क्या होगा जो कई तत्वों की आवश्यकता हो सकती है , जो "एक" है और "एक" रिश्ते हैं।

यह भ्रम विरासत की एक कठोर संरचना की ओर ले जाता है और फिर वे ऐसी विधियाँ हैं, जिन्हें अनुपयोगी छोड़ दिया जाता है क्योंकि उन्हें वास्तव में कभी नहीं बुलाया जाता है, बार-बार तर्क दिया जाता है जहाँ भागों को मोड़ने की आवश्यकता होती है, और बस आम तौर पर अजीब वर्कफ़्लो होते हैं जो व्यवसाय मॉडल से संरेखित नहीं होते हैं।

यहां कई अन्य लोगों की तरह, मैंने इसे दुर्भावनापूर्ण तरीके से नहीं देखा है, लेकिन अच्छे डिजाइन के ज्ञान की कमी और इसे दूसरों के लिए इस तरह से देखने का प्रयास करने के कारण। मज़ेदार, ऐसा लगता है कि डेवलपर्स भी कम जानकार हैं इस संबंध में बेहतर करने के लिए, क्योंकि कम से कम उनके कोड के अंत में इंजीनियर एड naseum नहीं है। ( KISS सिद्धांत )

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.