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

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

द्वारा Maximiliano Contieri9m2023/03/08
Read on Terminal Reader

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

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

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


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

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

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


आगे है...


कोड स्मेल 156 - इम्प्लिक्ट एल्स

हम अपने पहले प्रोग्रामिंग दिवस पर सीखते हैं अगर / और। फिर हम दूसरे को भूल जाते हैं।


टीएल; डीआर: स्पष्ट रहें। औरों के साथ भी।

समस्या

समाधान

  1. अन्य स्पष्ट लिखें

प्रसंग

यदि हम IF वाक्य पर जल्दी लौटते हैं, तो हम और भाग को छोड़ सकते हैं।


बाद में, हम IF को हटा देते हैं और बहुरूपता का उपयोग करते हैं।


तभी हम वास्तविक मामलों को याद करते हैं।

नमूना कोड

गलत

 function carBrandImplicit(model) { if (model === 'A4') { return 'audi'; } return 'Mercedes-Benz'; }

सही

 function carBrandExplicit(model) { if (model === 'A4') { return 'audi'; } if (model === 'AMG') { return 'Mercedes-Benz'; } // Fail Fast throw new Exception('Model not found); }

खोज

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


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


हम उन्हें फिर से लिख भी सकते हैं और उत्परिवर्तन परीक्षण भी कर सकते हैं।

टैग

  • सशर्त,

निष्कर्ष

इस तरह की गंध बहुत सारी सार्वजनिक बहस और नफरत लाती है।


हमें विचारों का आदान-प्रदान करना चाहिए और प्रत्येक पक्ष और विपक्ष को महत्व देना चाहिए।

रिश्ते

कोड गंध 102 - एरो कोड

कोड गंध 36 - स्विच/केस/अन्य यदि/अन्य/यदि कथन

और जानकारी

इम्प्लिक्ट एल्स का इस्तेमाल बंद करें

इम्प्लिक्ट एल्स का इस्तेमाल कब करें

तेजी से विफल

कष्टप्रद आईएफएस से हमेशा के लिए कैसे छुटकारा पाएं

क्रेडिट

Unsplash पर ऐलेना मोज़विलो द्वारा फोटो


सॉफ्टवेयर टीमों पर सबसे बड़ा मुद्दा यह सुनिश्चित कर रहा है कि हर कोई समझता है कि हर कोई क्या कर रहा है।


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


कोड गंध 157 - 0 पर संतुलन

आज, मुझे अपने बटुए में भुगतान की उम्मीद थी। बैलेंस 0 था। मैं घबरा गया।


टीएल; डीआर: शून्य 0 नहीं है। त्रुटि 0 नहीं है। केवल 0 0 है।

समस्या

समाधान

  1. शून्य और त्रुटि के बीच स्पष्ट अंतर करें।

प्रसंग

मैंने सुरक्षा मुद्दों के बारे में बहुत कुछ पढ़ा है।


खासकर क्रिप्टो पर।


पिछले हफ्ते, मैंने एक क्रिप्टो हैक थ्रेड के बारे में पढ़ा।


जब मेरे बटुए ने मुझे शेष राशि के रूप में 0 दिखाया, तो मैं घबरा गया।


यह सिर्फ एक यूएक्स गंध थी।


ब्लॉकचेन अगम्य 💩 था

नमूना कोड

गलत

 """ Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable show 0 as the balance """ import requests import json def get_balance(address): url = "https://blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: return 0

सही

 """ Below code is automatically generated by code-davinci-002 on GTP3 Codex 1. check balance with blockchain 2. If blockchain is unreachable throw an error """ import requests import json def get_balance(address): url = "https://blockchain.info/q/addressbalance/" + address response = requests.get(url) if response.status_code == 200: return response.text else: raise BlockchainNotReachableError("Error reaching blockchain")

खोज

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


यह एक डिज़ाइन गंध है।


जब कोई अपवाद या रिटर्न कोड फेंका जाता है और 0 के साथ मास्क किया जाता है तो हम पैटर्न पा सकते हैं।

टैग

  • यूएक्स

निष्कर्ष

एक मार्गदर्शक के रूप में हमेशा कम विस्मय के सिद्धांत का पालन करें।

रिश्ते

कोड गंध 12 - अशक्त

कोड स्मेल 139 - यूजर इंटरफेस में बिजनेस कोड

कोड गंध 73 - अपेक्षित मामलों के लिए अपवाद

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

और जानकारी

अशक्त: द बिलियन डॉलर मिस्टेक

श्रेय

अनस्प्लैश पर जैस्मीन सेस्लर द्वारा फोटो

अस्वीकरण

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


नल के साथ मेरी वास्तविक आलोचना यह है कि यह अनावश्यक रूप से फिर से सभी पीड़ा को वापस लाता है कि यह चुनने के लिए कि क्या आपके कार्यक्रम को बिना जाँच के तेजी से चलाया जाए या जाँच के साथ धीमा चलाया जाए।


टोनी होरे (शून्य आविष्कारक)


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


कोड गंध 158 - चर चर नहीं


आप किसी वेरिएबल को एक मान देते हैं और उसका उपयोग करते हैं लेकिन उसे कभी नहीं बदलते।


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

समस्या

  • पठनीयता
  • बायजेक्शन म्यूटेबिलिटी का सम्मान करें।
  • संभावित प्रदर्शन और स्मृति मुद्दे।

समाधान

  1. चर को स्थिरांक में बदलें और इसके दायरे के बारे में स्पष्ट रहें।

रिफैक्टरिंग

रिफैक्टरिंग 003 - लगातार निकालें

रिफैक्टरिंग 008 - चर को स्थिरांक में बदलें

प्रसंग

हम हमेशा डोमेन से सीख रहे हैं।


कभी-कभी हम अनुमान लगाते हैं कि MAPPER के साथ कोई मान बदल सकता है।


बाद में, हम सीखते हैं कि यह नहीं बदलेगा।


इसलिए, हमें इसे निरंतर बढ़ावा देने की आवश्यकता है।


इससे मैजिक कांस्टेंट से भी बचा जा सकेगा।

नमूना कोड

गलत

 <?php function configureUser() { $password = '123456'; // Setting a password on a variable is another vulnerability // And Code Smell $user = new User($password); // Notice Variable doesn't change }

सही

 <?php define("USER_PASSWORD", '123456') function configureUser() { $user = new User(USER_PASSWORD); } // or function configureUser() { $user = new User(userPassword()); } function userPassword() : string { return '123456'; } // Case is an oversimplification as usual

खोज

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


कई लिंटर जांचते हैं कि चर के पास केवल एक असाइनमेंट है या नहीं।


हम उत्परिवर्तन परीक्षण भी कर सकते हैं, और यह देखने के लिए चर को संशोधित करने का प्रयास कर सकते हैं कि क्या परीक्षण टूटते हैं।

टैग

  • अस्थिरता

निष्कर्ष

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

रिश्ते

कोड स्मेल 116 - वेरिएबल्स की घोषणा 'var' के साथ

कोड स्मेल 127 - परिवर्तनशील स्थिरांक

कोड गंध 107 - चर पुन: उपयोग

कोड गंध 02 - स्थिरांक और जादू संख्या

और जानकारी

म्यूटेंट की ईविल पावर

अस्वीकरण

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

क्रेडिट

अनस्प्लैश पर नूह बुशर द्वारा फोटो


एक जटिल प्रणाली जो काम करती है, हमेशा एक साधारण प्रणाली से विकसित होती है जो काम करती है।


जॉन गैल


कोड स्मेल 159 - mIxEd_cASeI

गंभीर विकास कई अलग-अलग लोगों द्वारा किया जाता है। हमें सहमत होना शुरू करना होगा।


टीएल; डीआर: अलग-अलग केस रूपांतरणों को न मिलाएं

समस्या

  • पठनीयता
  • रख-रखाव

समाधान

  1. केस मानक चुनें


  2. उसे पकड़ कर रखें

प्रसंग

जब अलग-अलग लोग मिलकर सॉफ्टवेयर बनाते हैं, तो उनमें व्यक्तिगत या सांस्कृतिक मतभेद हो सकते हैं।

कुछ ऊंटकेस 🐫, अन्य स्नेक_केस 🐍, मैक्रो_केस🗣️, और कई अन्य पसंद करते हैं।


कोड सीधा और पठनीय होना चाहिए।

नमूना कोड

गलत

 { "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "UPDATED_AT": "2022-01-07T02:23:41.305Z", "created_at": "2019-01-07T02:23:41.305Z", "deleted at": "2022-01-07T02:23:41.305Z" }

सही

 { "id": 2, "userId": 666, "accountNumber": "12345-12345-12345", "updatedAt": "2022-01-07T02:23:41.305Z", "createdAt": "2019-01-07T02:23:41.305Z", "deletedAt": "2022-01-07T02:23:41.305Z" // This doesn't mean THIS standard is the right one }

खोज

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

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


जब भी नए लोग संगठन में आते हैं, तो एक स्वचालित परीक्षण को विनम्रता से उनसे कोड बदलने के लिए कहना चाहिए।

अपवाद

जब भी हमें अपने दायरे से बाहर कोड के साथ बातचीत करने की आवश्यकता होती है, तो हमें ग्राहक के मानकों का उपयोग करना चाहिए, न कि हमारे।

टैग

  • नामकरण

निष्कर्ष

मानकों से निपटना आसान है।


हमें उन्हें लागू करने की जरूरत है।

रिश्ते

कोड गंध 48 - मानकों के बिना कोड

और जानकारी

वास्तव में नाम क्या है - भाग I खोज

सभी नामकरण परंपराएं

अस्वीकरण

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

क्रेडिट

अनस्प्लैश पर वोल्फगैंग हैसलमैन द्वारा फोटो


यदि आपके पास बहुत अधिक विशेष मामले हैं, तो आप इसे गलत कर रहे हैं।


क्रेग ज़ेरोनी


कोड गंध 160 - अमान्य आईडी = 9999

अमान्य आईडी के लिए मैक्सिंट एक बहुत अच्छा नंबर है। हम उस तक कभी नहीं पहुंचेंगे।


टीएल; डीआर: अमान्य लोगों के साथ वास्तविक आईडी न जोड़ें। वास्तव में: आईडी से बचें।

समस्या


  • आप अपने विचार से पहले अमान्य आईडी तक पहुंच सकते हैं।


  • अमान्य आईडी के लिए भी नल का प्रयोग न करें।


  • कॉलर से फ़ंक्शंस के लिए फ़्लैग्स को युग्मित करना।

समाधान

  1. विशेष वस्तुओं के साथ मॉडल विशेष मामले।


  2. 9999, -1, और 0 से बचें क्योंकि वे मान्य डोमेन ऑब्जेक्ट और कार्यान्वयन युग्मन हैं।


  3. अशक्त वस्तु का परिचय दें

प्रसंग

कंप्यूटिंग के शुरुआती दिनों में, डेटा प्रकार सख्त थे।


फिर हमने बिलियन-डॉलर की गलती का आविष्कार किया।


फिर हम बड़े हुए और बहुरूपी विशेष मूल्यों के साथ विशेष परिदृश्य तैयार किए।

नमूना कोड

गलत

 #include "stdio.h" #include "stdlib.h" #include "stdbool.h" #define INVALID_VALUE 999 int main(void) { int id = get_value(); if (id==INVALID_VALUE) { return EXIT_FAILURE; // id is a flag and also a valid domain value } return id; } int get_value() { // something bad happened return INVALID_VALUE; } // returns EXIT_FAILURE (1)

सही

 #include "stdio.h" #include "stdlib.h" #include "stdbool.h" // No INVALID_VALUE defined int main(void) { int id; id = get_value(); if (!id) { return EXIT_FAILURE; // Sadly, C Programming Language has no exceptions } return id; } get_value() { // something bad happened return false; } // returns EXIT_FAILURE (1)

खोज

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


हम कोड में विशेष स्थिरांक और विशेष मान की जांच कर सकते हैं।

टैग

  • व्यर्थ

निष्कर्ष

हमें बाहरी पहचानकर्ताओं से संबंधित संख्याओं का उपयोग करना चाहिए।


यदि कोई बाहरी पहचानकर्ता मौजूद नहीं है, तो यह कोई संख्या नहीं है।

रिश्ते

कोड गंध 120 - अनुक्रमिक आईडी

कोड गंध 12 - अशक्त

और जानकारी

अशक्त: द बिलियन डॉलर मिस्टेक

Y2K22 - वह गलती जो हमें शर्मिंदा करती है

अस्वीकरण

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

क्रेडिट

अनस्प्लैश पर मार्कस स्पिस्के द्वारा फोटो


कीड़े कोनों में दुबक जाते हैं और सीमाओं पर एकत्र हो जाते हैं।


बोरिस बेइज़र


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