Avoiding Code Smells Java In Hindi
जावा प्रोग्रामिंग लैंग्वेज में, कोड स्मेल्स कांसेप्ट इस मेथड को इंडीकेट करता हैं, जिसमे यूजर डिफाइन एक कस्टम जावा प्रोग्राम सोर्स कोड को इजीली अंडरस्टैंड करना, सोर्स कोड बेस को मेंटेन करना, लार्ज वॉल्यूम सोर्स कोड को टेस्ट और मैन्युअल डिबग करना या कोड के इंटरनल स्ट्रक्चर को इनक्रीस करना एक काम्प्लेक्स टास्क हो सकता है। जहा किसी प्रोग्राम में ये ज़रूरी नहीं हो कि उसमे कोई इशू या बग हों, लेकिन ज्यादातर मामलो में यह कांसेप्ट इंडीकेट करते हैं कि रीफैक्टरिंग से डिज़ाइन प्रोग्राम सोर्स कोड अपने आप में एक बेहतर कोड होगा।

Some of the Basic Java Code Smells Concept.
| # | Code Smell Method | Short Code Smell Method Example | How To Avoid Situation |
| 1. | Long Method | That type method contains 1000+ program source codes lines | We can split large source code into a smaller block of code methods |
| 2. | Large Class | One of the classes handles database, business logic, and UI interface according to multiple class method | In that it follows single responsibility principal concept method |
| 3. | Duplicate Code | Remember Same code repeated in several user define class methods | In that it extracts common logic into a method/class that use one or time according to use |
| 4. | Magic Numbers | if (employee_age > 21) | Here we use class named constants such as MINIMUM_EMPLOYEE_AGE |
| 5. | Long Parameter List | We can create it with create Client(p,q,r,t,u,v) | In that mode, you can use a multiple class parameter object |
| 6. | Deeply Nested Code | We can use Multiple nested if statements, if necessary, in existing class | For that, we can use a guard clauses and extract class methods |
| 7. | Unused Code | May be class Unused variables/ methods/ imports method depend on user element | Immediately remove all of them from you existing class or program object |
| 8. | God Class | Never hold one class, that does almost hold everything in active class | In that mode we can, divide large program in multiple small responsibilities |
| 9. | Primitive Obsession | In that mode we can Passing many related String/int values users define custom value element | In that mode we can create meaningful domain classes according to program source code need |
| 10. | Switch/if Explosion | Use Large switch handling concept to many object class types | We can use or apply polymorphism or a suitable design pattern for that |
An example of avoiding a long method in a Java program.
Example of Java Smelly Code Concept.
public void processOrder(Order order) {
// validate clientorder
// totalprice
// usediscount
// saveclientorder
// sendemailtoclient
// इसके साथ ही जावा यूजर और भी कई लाइनो को एक साथ ऐड कर सकते है…
}
Java code designed using the refactoring method.
public void processOrder(Order order) {
testOrder(order);
totalPrice(order);
useDiscount(order);
saveclientOrder(order);
sendEmailMessage(order);
}
यहाँ इस एक्साम्प्ल में हर यूजर डिफाइन क्लास मेथड में अब एक क्लियर प्रोग्राम एलिमेंट रेस्पॉन्सिबिलिटीज़ डिफाइन की गई है।
Avoid magic number examples.
Example of basic Smelly Code Concept.
if (employee.getAge() >= 21) {
permittedEntry();
}
Example of better Smelly Code Concept.
private static final int MINIMUM_EMPLOYEE_AGE = 21;
if (employee.getAge() >= MINIMUM_EMPLOYEE_AGE) {
permittedEntry();
}
यहाँ इस एक्साम्प्ल में कॉन्स्टेंट वेरिएबल एलिमेंट यह इंडीकेट करता है कि 21 एम्प्लॉई ऐज का क्या यूज़ या पर्पस है।
Example to avoid duplicate code.
Smelly duplicate code.
double countEmployeeSalary(Employee employee) {
return employee.getBasicSalary() + employee.getBonus();
}
double countManagerSalary(Manager manager) {
return manager.getBasicSalary() + manager.getBonus();
}
यदि इस एक्साम्प्ल में दोनों का काउंट या कैलकुलेशन सच में एक जैसा डिक्लेअर या डिफाइन किया गया है, तो इसमें आप एक कॉमन क्लास बिहेवियर को एक्सट्रेक्ट करे या एक प्रॉपर शेयर्ड एब्स्ट्रैक्शन मेथड का यूज़ करें।
double countSalary(Employee employee) {
return employee.getBasicSalary() + employee.getBonus();
}
Example to avoid deep nesting.
Smelly avoid deep nesting code.
if (client!= null) {
if (client.isRunning()) {
if (client.hasAllowed()) {
processTask();
}
}
}
Example of Better deep nesting code.
if (client == null || !client.isRunning() || !client.hasAllowed()) {
return;
}
processTask();
यहाँ ऊपर दिए गए एक्साम्प्ल में अब इस कोड को पढ़ना इजी है, और यह इस प्रोग्राम में नेस्टिंग टास्क एक्टिविटीज को कम करता है।
Conclusion of Avoiding Code Smells with java.
- जावा प्रोग्रामर हमेशा इन 5 SOLID प्रिंसिपल्स कांसेप्ट को फॉलो करें।
- हमेशा प्रोग्राम में डिक्लेअर क्लासेस और यूजर डिफाइन मेथड्स को स्माल और फोकस्ड रखें।
- बड़े या कन्फ्यूजिंग प्रोग्राम सोर्स कोड को समझाने वाले कमेंट्स के बदले सिर्फ यूज़फुल नेमिंग वैल्यूज को प्रायोरिटी प्रोवाइड करे।
- गैर-जरूरी कोड स्मेल में डुप्लीकेशन कोड टास्क को अवॉयड करे।
- जहां मौजूदा प्रोग्राम में सही या जरूरी हो वहां इम्यूटेबलिटी प्रोग्राम नेचर वैल्यू को इंडीकेट करने के लिए final रिजर्व्ड कीवर्ड का यूज़ करें।
- अपने बड़े प्रोग्राम में बहुत ज़्यादा इनहेरिटेंस कांसेप्ट मेथड यूज़ के बदले कंपोजिशन कांसेप्ट को प्रायोरिटी प्रोवाइड करे।
- अपने प्रोग्राम में ऐसे क्लास इंटरफेस का यूज़ करें, जहां वे अपने यूज़ या मतलब वाला एब्स्ट्रैक्शन प्रोवाइड करे।
- हमेशा अपने प्रोग्राम सोर्स कोड में बिजनेस लॉजिक को डेटाबेस एक्सेस जैसी इंफ्रास्ट्रक्चर प्रोब्लेम्स से सेपरेट मैनेज करे।
- अपने बड़े काम्प्लेक्स प्रोग्राम का एक यूनिट टेस्ट लिखे, जिससे की रिफैक्टरिंग मेथड ज़्यादा सिक्योर और मैनेज हो।
- अपने मौजूदा प्रोग्राम सोर्स कोड मेंटेनेंस से कनेक्टेड इश्यूज प्रोब्लेम्स फाइंड आउट करने के लिए सोनारक्यूब, स्पॉटबग्स और चेकस्टाइल जैसे अवेलेबल टूल्स मेथड का यूज़ करें।
In short, जावा प्रोग्रामिंग लैंग्वेज में, एक अच्छा यूजर डिफाइन जावा प्रोग्राम सोर्स कोड रीडेबल, मेंटेन करने आसान, टेस्ट करने में आसान और आसानी से मॉडिफाई होना चाहिए। जावा में कोड स्मेल्स अलार्म या वॉर्निंग्स हैं, जिससे कि इनमें से एक या अधिक प्रोग्राम सोर्स कोड क्वालिटी खराब या डैमेज हो सकती हैं।

