paint-brush
अपने कोड के बदबूदार हिस्सों को कैसे खोजें [भाग XXXIV]द्वारा@mcsee
773 रीडिंग
773 रीडिंग

अपने कोड के बदबूदार हिस्सों को कैसे खोजें [भाग XXXIV]

द्वारा Maximiliano Contieri7m2023/04/07
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

यह गंध करता है क्योंकि ऐसे कई उदाहरण हैं जहां इसे संपादित या बेहतर किया जा सकता है। इनमें से अधिकतर गंध कुछ गलत होने का संकेत हैं। इसलिए, उन्हें अपने आप ठीक करने की आवश्यकता नहीं है... (हालांकि, आपको इस पर गौर करना चाहिए।) पिछला कोड स्मेल्स आप पिछले सभी कोड स्मेल्स (भाग i - XXXIII) यहां पा सकते हैं।
featured image - अपने कोड के बदबूदार हिस्सों को कैसे खोजें [भाग XXXIV]
Maximiliano Contieri HackerNoon profile picture

यह गंध करता है क्योंकि ऐसे कई उदाहरण हैं जहां इसे संपादित या बेहतर किया जा सकता है।


इनमें से अधिकतर गंध कुछ गलत होने का संकेत हैं। इसलिए, उन्हें अपने आप ठीक करने की आवश्यकता नहीं है ... (हालांकि, आपको इसे देखना चाहिए।)

पिछला कोड बदबू आ रही है

आप पिछले सभी कोड गंध (भाग i - XXXIII) यहां पा सकते हैं।


आगे है...


कोड गंध 166 - उपयोगकर्ता इंटरफ़ेस पर निम्न-स्तर की त्रुटियाँ

गंभीर त्रुटि: ध्यान में न आया त्रुटि: वर्ग 'logs_queries_web' /var/www/html/query-line.php:78 में नहीं मिला


स्टैक ट्रेस: #0 {मुख्य} लाइन 718 पर /var/www/html/query-line.php में डाला गया


टीएल; डीआर: अपनी त्रुटियां पकड़ें। यहां तक कि जिनकी आप उम्मीद नहीं करते हैं।

समस्या

  • सुरक्षा


  • त्रुटि प्रबंधन


  • त्रुटि लॉगिंग


  • खराब यूएक्स अनुभव

समाधान

  1. एक शीर्ष-स्तरीय हैंडलर का प्रयोग करें।


  2. रिटर्न कोड के पक्ष में भाषाओं से बचें।


  3. डेटाबेस और निम्न-स्तरीय त्रुटियों की अपेक्षा करें।

प्रसंग

यहां तक कि 2022 में, हम "गंभीर" वेबसाइटों को आकस्मिक उपयोगकर्ताओं को स्टैक या डिबगिंग संदेश दिखाते हुए देख सकते हैं।

नमूना कोड

गलत

 <? Fatal error: Uncaught Error: Class 'MyClass' not found in /nstest/src/Container.php:9

सही

 <? // A user-defined exception handler function function myException($exception) { logError($exception->description()) // We don't show Exception to final users } // Set user-defined exception handler function set_exception_handler("myException");

खोज

  • [एक्स] स्वचालित

हम उत्परिवर्तन परीक्षण का उपयोग समस्याओं का अनुकरण करने के लिए कर सकते हैं और देख सकते हैं कि क्या वे सही तरीके से संभाले गए हैं।

टैग

  • सुरक्षा

निष्कर्ष

हमें परिपक्व बने रहने की जरूरत है।


हमारे समाधान मैला नहीं होना चाहिए।



हमें गंभीर सॉफ्टवेयर इंजीनियरों के रूप में अपनी प्रतिष्ठा सुधारने की जरूरत है।

रिश्ते

कोड स्मेल 72 - रिटर्न कोड

और जानकारी

तेजी से विफल

अस्वीकरण

कोड स्मेल सिर्फ मेरी राय है।

क्रेडिट

Unsplash पर जेसी ऑरिको द्वारा फोटो


मेरी 80 प्रतिशत समस्याएं सरल तर्क त्रुटियाँ हैं। शेष समस्याओं में से 80 प्रतिशत सूचक त्रुटियाँ हैं। शेष समस्याएं कठिन हैं।

मार्क डोनर

सॉफ्टवेयर इंजीनियरिंग महान उद्धरण


कोड गंध 167 - हैशिंग तुलना

हैशिंग गारंटी देता है कि दो वस्तुएं अलग हैं। ऐसा नहीं है कि वे वही हैं।


टीएल; डीआर: यदि आप हैश की जांच करते हैं, तो आपको समानता की भी जांच करनी चाहिए

समस्या

समाधान

  1. हैश (तेज) के लिए जाँच करें, और फिर समानता (धीमा) के लिए जाँच करें

प्रसंग

7 अक्टूबर, 2022 को, बड़े ब्लॉकचेन में से एक को रोकना पड़ा।


यह खबर चौंकाने वाली थी क्योंकि परिभाषा के अनुसार अधिकांश ब्लॉकचेन विकेंद्रीकृत हैं।


आप यहां एक पूरा लेख पढ़ सकते हैं:

कैसे एक हैकर ने एक कोड स्मेल का फायदा उठाते हुए $566M USD चुरा लिए

नमूना कोड

गलत

 public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return (int)(Math.random()*256); } // This is just an example of non-correlation // When using HashMaps we can make a mistake // and guess the object is not present in the collection }

सही

 public class Person { public String name; // Public attributes are another smell @Override public boolean equals(Person anotherPerson) { return name.equals(anotherPerson.name); } @Override public int hashCode() { return name.hashCode(); } // This is just an example of non-correlation }

खोज

  • [x] अर्ध-स्वचालित

कई लिंटर्स में हैश और समानता पुनर्वितरण के नियम हैं।


उत्परिवर्तन परीक्षण के साथ, हम एक ही हैश के साथ विभिन्न वस्तुओं को सीड कर सकते हैं और अपने परीक्षणों की जांच कर सकते हैं।

  • पहचान
  • सुरक्षा

निष्कर्ष

हर प्रदर्शन सुधार की अपनी कमियां हैं।


कैश और प्रतिकृति उल्लेखनीय उदाहरण हैं।


हम उन्हें सावधानी से इस्तेमाल कर सकते हैं (जरूरी है)।

रिश्ते

कोड गंध 49 - कैश

कोड गंध 150 - समान तुलना

और जानकारी

समानता और हैश

जावा में हैशकोड

हैशकोड बनाम समान

अस्वीकरण

कोड स्मेल सिर्फ मेरी राय है।


यह आपके कुछ पाठकों को आश्चर्यचकित करेगा, लेकिन मेरी प्राथमिक रुचि कंप्यूटर सुरक्षा में नहीं है। मैं मुख्य रूप से ऐसे सॉफ़्टवेयर लिखने में दिलचस्पी रखता हूँ जो ठीक से काम करता हो।

विटसे वेनेमा

सॉफ्टवेयर इंजीनियरिंग महान उद्धरण


कोड स्मेल 168 - अविलेखित निर्णय

हमें कुछ बदलाव करने की जरूरत है। हमें स्पष्ट होना चाहिए कि ऐसा क्यों है

टीएल; डीआर: अपने डिजाइन या कार्यान्वयन निर्णयों पर घोषणात्मक बनें।

समस्या

  • कोड टिप्पणियाँ
  • टेस्टेबिलिटी का अभाव

समाधान

  1. कारणों के बारे में स्पष्ट रहें।
  2. टिप्पणी को विधि में बदलें।

प्रसंग

कभी-कभी हमें मनमाना नियम आसानी से परीक्षण योग्य नहीं लगते।


यदि हम असफल परीक्षण नहीं लिख सकते हैं, तो हमें एक टिप्पणी के बजाय एक उत्कृष्ट और घोषणात्मक नाम के साथ एक कार्य करने की आवश्यकता है।

नमूना कोड

गलत

 // We need to run this process with more memory set_memory("512k) run_process();

सही

 increase_memory_to_avoid_false_positives(); run_process();

खोज

  • [x] अर्ध-स्वचालित

यह एक अर्थपूर्ण गंध है।


हम टिप्पणियों का पता लगा सकते हैं और हमें चेतावनी दे सकते हैं।

टैग

  • टिप्पणियाँ

निष्कर्ष

संहिता गद्य है। और डिजाइन के फैसले कथात्मक होने चाहिए।

रिश्ते

कोड स्मेल 05 - अपशब्दों पर टिप्पणी करें

कोड गंध 75 - एक विधि के अंदर टिप्पणियाँ

अस्वीकरण

कोड स्मेल सिर्फ मेरी राय है।

क्रेडिट

Unsplash पर Goh Rhy Yan द्वारा फोटो


लोगों की तरह कार्यक्रम भी पुराने हो जाते हैं। हम उम्र बढ़ने को नहीं रोक सकते, लेकिन हम इसके कारणों को समझ सकते हैं, इसके प्रभावों को सीमित कर सकते हैं और कुछ नुकसानों को उलट सकते हैं।

मारियो फुस्को

सॉफ्टवेयर इंजीनियरिंग महान उद्धरण


कोड गंध 169 - सरेस से जोड़ा हुआ तरीके

एक साथ दो या अधिक चीजें न बनाएं।

टीएल; डीआर: अपने तरीकों में जितना संभव हो उतना परमाणु बनने की कोशिश करें

समस्या

  • युग्मित कोड
  • परीक्षण करना कठिन है
  • पढ़ने में कठिन

समाधान

  1. विधि तोड़ो

रिफैक्टरिंग

https://maximilianocontieri.com/refactoring-002-extract-method

प्रसंग

यदि आप 'और' के साथ एक विधि का नाम देते हैं, तो संभवतः आप एक एक्सट्रैक्ट-एंड-ब्रेक विधि अवसर खो रहे हैं।

नमूना कोड

गलत

 calculatePrimeFactorsRemoveDuplicatesAndPrintThem() // Three responsibilities

सही

 calculatePrimeFactors(); removeDuplicates(); printNumbers(); // Three different methods // We can test them and reuse them

खोज

  • [x] अर्ध-स्वचालित

कुछ लिंटर हमें 'और' शब्द सहित विधियों के बारे में चेतावनी दे सकते हैं।

टैग

  • युग्मन

निष्कर्ष

तरीके बनाते समय, कुछ रबर डक की कहानी खेलना और खुद को बताना बहुत महत्वपूर्ण है कि क्या हम चीजों को सही बना रहे हैं।

रिश्ते

%[ https://maximilianocontieri.com/code-smell-85-and-functions ]

अस्वीकरण

कोड स्मेल सिर्फ मेरी राय है।

क्रेडिट

अनस्प्लैश पर स्कॉट संकर द्वारा फोटो


प्रोग्रामिंग की कला सीखना, अधिकांश अन्य विषयों की तरह, पहले नियमों को सीखना और फिर उन्हें तोड़ना सीखना शामिल है।

जोशुआ बलोच


कोड गंध 170 - कार्यात्मक परिवर्तनों के साथ रिफैक्टर

विकसित करना बहुत अच्छा है। रिफैक्टरिंग अद्भुत है। इसे एक ही समय पर न बनाएं

टीएल; डीआर: एक ही समय में कार्यात्मक रूप से और रिफैक्टर न बदलें।

समस्या

  • समाधानों की समीक्षा करना कठिन है
  • संघर्ष मर्ज करें

समाधान

  1. रिफैक्टरिंग करते समय कार्यक्षमता को कभी न बदलें

प्रसंग

कभी-कभी हमें पता चलता है कि आगे के विकास के लिए रिफैक्टरिंग की आवश्यकता है।


हम सीखने में माहिर हैं।


हमें अपने समाधान को ताक पर रख देना चाहिए। रिफैक्टरिंग पर काम करें, और हमारे समाधान के साथ जारी रखें।

नमूना कोड

गलत

 getFactorial(n) { return n * getFactorial(n); } // Rename and Change factorial(n) { return n * factorial(n-1); } // This is a very small example // Things go works while dealing with huge code

सही

 getFactorial(n) { return n * getFactorial(n); } // Change getFactorial(n) { return n * getFactorial(n-1); } // Run the tests factorial(n) { return n * factorial(n-1); } // Rename

खोज

यह एक रिफैक्टरिंग गंध है।

  • [एक्स] मैनुअल

टैग

  • पुनर्रचना

निष्कर्ष

हमें एक भौतिक टोकन का उपयोग करना चाहिए।


या तो हम रिफैक्टरिंग चरण या विकासशील चरण में हैं।

अस्वीकरण

कोड स्मेल सिर्फ मेरी राय है।

क्रेडिट

अनस्प्लैश पर डैनी जिंग द्वारा फोटो


जब मैं कोड का अध्ययन कर रहा हूं, तो रिफैक्टरिंग मुझे उच्च स्तर की समझ में ले जाती है जिसे मैं अन्यथा याद करता हूं। जो लोग कॉम्प्रिहेंशन रिफैक्टरिंग को कोड के साथ बेकार की फिजूलखर्ची के रूप में खारिज करते हैं, उन्हें यह एहसास नहीं होता है कि वे भ्रम के पीछे छिपे अवसरों को कभी नहीं देखते हैं।

मार्टिन फाउलर


5 और कोड स्मेल जल्द ही आ रहे हैं...