Java में क्लीन कोड: अभ्यासकर्ताओं के लिए सिद्धांत और उदाहरण

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Java में क्लीन कोड: सिद्धांत और व्यवहार में उदाहरण

\n\n

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

\n\n

1. वेरिएबल्स, विधियों और क्लासेस का नामकरण

\n\n

सही नाम आधी सफलता है। नाम को प्रोग्रामर के इरादे को प्रकट करना चाहिए। यदि आपको यह समझने के लिए विधि के बॉडी को पढ़ने की आवश्यकता है कि यह क्या करती है, तो नाम असफल रूप से चुना गया है।

\n\n

खराब उदाहरण:

\n
int d; // elapsed time in days\nList<Integer> lst = new ArrayList<>();\npublic void proc(int a, int b) {\n    // ...\n}
\n\n

अच्छा उदाहरण:

\n
int elapsedTimeInDays;\nList<Integer> customerIds = new ArrayList<>();\npublic void calculateTotalPrice(double basePrice, double discount) {\n    // ...\n}
\n\n

नामकरण के नियम:

\n
    \n
  • क्लासेस और इंटरफेसेस — संज्ञाएँ (Customer, OrderProcessor, PaymentService)।
  • \n
  • विधियाँ — क्रियाएँ या क्रिया संरचनाएँ (saveCustomer, findById, isActive)।
  • \n
  • वेरिएबल्स — सार्थक संज्ञाएँ जो डेटा के सार को दर्शाती हैं (userName, totalAmount)।
  • \n
  • संक्षिप्ताक्षरों से बचें — fn के बजाय fullName लिखें, अन्यथा एक महीने बाद आप स्वयं याद नहीं रख पाएंगे कि fn का क्या अर्थ है।
  • \n
\n\n

2. छोटी विधियाँ और एकल जिम्मेदारी का सिद्धांत

\n\n

विधि को केवल एक काम करना चाहिए और उसे अच्छी तरह से करना चाहिए। यदि किसी विधि में 10-15 से अधिक पंक्तियाँ हैं या नेस्टिंग के कई स्तर हैं - तो यह रिफैक्टरिंग का संकेत है।

\n\n

खराब उदाहरण (विधि बहुत अधिक करती है):

\n
public void processOrder(Order order) {\n    // 1. वैलिडेशन\n    if (order.getItems().isEmpty()) throw new IllegalArgumentException("Order is empty");\n    // 2. छूट की गणना\n    double discount = 0;\n    if (order.getCustomer().isPremium()) discount = 0.1;\n    // 3. अंतिम मूल्य की गणना\n    double total = 0;\n    for (Item item : order.getItems()) {\n        total += item.getPrice() * item.getQuantity();\n    }\n    total = total * (1 - discount);\n    // 4. डेटाबेस में सहेजना\n    orderRepository.save(order);\n    // 5. ईमेल भेजना\n    emailService.sendConfirmation(order.getCustomer().getEmail());\n}
\n\n

अच्छा उदाहरण (छोटी विधियों में विभाजन):

\n
public void processOrder(Order order) {\n    validateOrder(order);\n    double discount = calculateDiscount(order.getCustomer());\n    double totalPrice = calculateTotalPrice(order, discount);\n    order.setTotalPrice(totalPrice);\n    orderRepository.save(order);\n    sendConfirmationEmail(order.getCustomer());\n}\n\nprivate void validateOrder(Order order) {\n    if (order.getItems().isEmpty()) {\n        throw new IllegalArgumentException("Order cannot be empty");\n    }\n}\n\nprivate double calculateDiscount(Customer customer) {\n    return customer.isPremium() ? 0.1 : 0.0;\n}\n\nprivate double calculateTotalPrice(Order order, double discount) {\n    double subtotal = order.getItems().stream()\n            .mapToDouble(item -> item.getPrice() * item.getQuantity())\n            .sum();\n    return subtotal * (1 - discount);\n}\n\nprivate void sendConfirmationEmail(Customer customer) {\n    emailService.sendConfirmation(customer.getEmail());\n}
\n\n

3. कोड की पुनरावृत्ति से बचें (DRY — Don't Repeat Yourself)

\n\n

पुनरावृत्ति कई बुराइयों की जड़ है। जब तर्क कई स्थानों पर दोहराया जाता है, तो कोई भी बदलाव संशोधन की आवश्यकता होती है

ब्लॉग

पुस्तक अनुशंसाएँ