यह गंध करता है क्योंकि ऐसे कई उदाहरण हैं जहां इसे संपादित या बेहतर किया जा सकता है।
इनमें से अधिकतर गंध कुछ गलत होने का संकेत हैं। इसलिए, उन्हें अपने आप ठीक करने की आवश्यकता नहीं है ... (हालांकि, आपको इसे देखना चाहिए।)
आप पिछले सभी कोड गंध (भाग i - XXXI) यहां पा सकते हैं।
आगे है...
हम अपने पहले प्रोग्रामिंग दिवस पर सीखते हैं अगर / और। फिर हम दूसरे को भूल जाते हैं।
टीएल; डीआर: स्पष्ट रहें। औरों के साथ भी।
यदि हम 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); }
हम सिंटैक्स ट्री की जांच कर सकते हैं और उन्हें पार्स कर सकते हैं और अन्य गुम होने की चेतावनी दे सकते हैं।
हम उन्हें फिर से लिख भी सकते हैं और उत्परिवर्तन परीक्षण भी कर सकते हैं।
इस तरह की गंध बहुत सारी सार्वजनिक बहस और नफरत लाती है।
हमें विचारों का आदान-प्रदान करना चाहिए और प्रत्येक पक्ष और विपक्ष को महत्व देना चाहिए।
कोड गंध 36 - स्विच/केस/अन्य यदि/अन्य/यदि कथन
इम्प्लिक्ट एल्स का इस्तेमाल बंद करें
इम्प्लिक्ट एल्स का इस्तेमाल कब करें
कष्टप्रद आईएफएस से हमेशा के लिए कैसे छुटकारा पाएं
Unsplash पर ऐलेना मोज़विलो द्वारा फोटो
सॉफ्टवेयर टीमों पर सबसे बड़ा मुद्दा यह सुनिश्चित कर रहा है कि हर कोई समझता है कि हर कोई क्या कर रहा है।
मार्टिन फाउलर
आज, मुझे अपने बटुए में भुगतान की उम्मीद थी। बैलेंस 0 था। मैं घबरा गया।
टीएल; डीआर: शून्य 0 नहीं है। त्रुटि 0 नहीं है। केवल 0 0 है।
मैंने सुरक्षा मुद्दों के बारे में बहुत कुछ पढ़ा है।
खासकर क्रिप्टो पर।
पिछले हफ्ते, मैंने एक क्रिप्टो हैक थ्रेड के बारे में पढ़ा।
जब मेरे बटुए ने मुझे शेष राशि के रूप में 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 के साथ मास्क किया जाता है तो हम पैटर्न पा सकते हैं।
एक मार्गदर्शक के रूप में हमेशा कम विस्मय के सिद्धांत का पालन करें।
कोड स्मेल 139 - यूजर इंटरफेस में बिजनेस कोड
कोड गंध 73 - अपेक्षित मामलों के लिए अपवाद
अनस्प्लैश पर जैस्मीन सेस्लर द्वारा फोटो
कोड स्मेल सिर्फ मेरी राय है।
नल के साथ मेरी वास्तविक आलोचना यह है कि यह अनावश्यक रूप से फिर से सभी पीड़ा को वापस लाता है कि यह चुनने के लिए कि क्या आपके कार्यक्रम को बिना जाँच के तेजी से चलाया जाए या जाँच के साथ धीमा चलाया जाए।
टोनी होरे (शून्य आविष्कारक)
सॉफ्टवेयर इंजीनियरिंग महान उद्धरण
आप किसी वेरिएबल को एक मान देते हैं और उसका उपयोग करते हैं लेकिन उसे कभी नहीं बदलते।
टीएल; डीआर: परिवर्तनशीलता पर घोषणात्मक बनें।
रिफैक्टरिंग 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 - परिवर्तनशील स्थिरांक
कोड गंध 02 - स्थिरांक और जादू संख्या
कोड स्मेल सिर्फ मेरी राय है।
अनस्प्लैश पर नूह बुशर द्वारा फोटो
एक जटिल प्रणाली जो काम करती है, हमेशा एक साधारण प्रणाली से विकसित होती है जो काम करती है।
जॉन गैल
गंभीर विकास कई अलग-अलग लोगों द्वारा किया जाता है। हमें सहमत होना शुरू करना होगा।
टीएल; डीआर: अलग-अलग केस रूपांतरणों को न मिलाएं
केस मानक चुनें
उसे पकड़ कर रखें
जब अलग-अलग लोग मिलकर सॉफ्टवेयर बनाते हैं, तो उनमें व्यक्तिगत या सांस्कृतिक मतभेद हो सकते हैं।
कुछ ऊंटकेस 🐫, अन्य स्नेक_केस 🐍, मैक्रो_केस🗣️, और कई अन्य पसंद करते हैं।
कोड सीधा और पठनीय होना चाहिए।
{ "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 खोज
कोड स्मेल सिर्फ मेरी राय है।
अनस्प्लैश पर वोल्फगैंग हैसलमैन द्वारा फोटो
यदि आपके पास बहुत अधिक विशेष मामले हैं, तो आप इसे गलत कर रहे हैं।
क्रेग ज़ेरोनी
अमान्य आईडी के लिए मैक्सिंट एक बहुत अच्छा नंबर है। हम उस तक कभी नहीं पहुंचेंगे।
टीएल; डीआर: अमान्य लोगों के साथ वास्तविक आईडी न जोड़ें। वास्तव में: आईडी से बचें।
विशेष वस्तुओं के साथ मॉडल विशेष मामले।
9999, -1, और 0 से बचें क्योंकि वे मान्य डोमेन ऑब्जेक्ट और कार्यान्वयन युग्मन हैं।
अशक्त वस्तु का परिचय दें
कंप्यूटिंग के शुरुआती दिनों में, डेटा प्रकार सख्त थे।
फिर हमने बिलियन-डॉलर की गलती का आविष्कार किया।
फिर हम बड़े हुए और बहुरूपी विशेष मूल्यों के साथ विशेष परिदृश्य तैयार किए।
#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)
हम कोड में विशेष स्थिरांक और विशेष मान की जांच कर सकते हैं।
हमें बाहरी पहचानकर्ताओं से संबंधित संख्याओं का उपयोग करना चाहिए।
यदि कोई बाहरी पहचानकर्ता मौजूद नहीं है, तो यह कोई संख्या नहीं है।
Y2K22 - वह गलती जो हमें शर्मिंदा करती है
कोड स्मेल सिर्फ मेरी राय है।
अनस्प्लैश पर मार्कस स्पिस्के द्वारा फोटो
कीड़े कोनों में दुबक जाते हैं और सीमाओं पर एकत्र हो जाते हैं।
बोरिस बेइज़र
5 और कोड स्मेल जल्द ही आ रहे हैं...