जावा में स्वच्छ कोड: उदाहरणों के साथ Clean Code के सिद्धांत

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

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

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

परिचय: स्वच्छ कोड (Clean Code) विलासिता नहीं, बल्कि आवश्यकता क्यों है

हर डेवलपर कम से कम एक बार ऐसे कोड से जूझता है जिसे बिना कॉफी और ध्यान के समझना असंभव है। a, b, temp नाम वाले वेरिएबल, 500 लाइनों वाले तरीके और "यहाँ जादू है, मत छुओ" जैसी टिप्पणियाँ — ये स्पष्ट संकेत हैं कि प्रोजेक्ट "लेगसी" में बदल रहा है। Clean Code (स्वच्छ कोड) एक दर्शन और अभ्यासों का समूह है जो कोड को पढ़ने योग्य, आसानी से बनाए रखने योग्य और विस्तार योग्य बनाता है।

इस लेख में, हम Java भाषा में Clean Code के प्रमुख सिद्धांतों को विशिष्ट उदाहरणों के साथ समझेंगे। आप सीखेंगे कि ऐसा कोड कैसे लिखें जिसे पढ़ने के लिए आप और आपके सहकर्मी छह महीने बाद भी आभारी रहेंगे।



सिद्धांत 1: अर्थपूर्ण नाम (Meaningful Names)

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



खराब उदाहरण

public List<Integer> getList(int a) {    List<Integer> list = new ArrayList<>();    for (int i = 0; i < a; i++) {        list.add(i * 2);    }    return list;}

यह मेथड क्या करता है? a क्या है? क्या यह सम संख्याओं की सूची लौटाता है? या बस किसी चीज़ को दो से गुणा करता है?



अच्छा उदाहरण (Clean Code)

public List<Integer> generateEvenNumbers(int count) {    List<Integer> evenNumbers = new ArrayList<>();    for (int i = 0; i < count; i++) {        evenNumbers.add(i * 2);    }    return evenNumbers;}

अब बिना टिप्पणी के सब कुछ स्पष्ट है: मेथड दी गई लंबाई की सम संख्याओं की सूची उत्पन्न करता है।



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

  • क्लासेस: संज्ञाएँ (User, PaymentProcessor)
  • मेथड्स: क्रियाएँ (saveUser(), calculateTotal())
  • वेरिएबल्स: सार्थक संज्ञाएँ (userName, totalPrice)
  • बचें: संक्षिप्ताक्षरों (usrNm), एक अक्षर वाले नामों (लूप काउंटर i, j को छोड़कर)


सिद्धांत 2: एकल जिम्मेदारी वाले छोटे मेथड

मेथड को केवल एक काम करना चाहिए और उसे अच्छी तरह करना चाहिए। यदि मेथड को "और" (पहले A करता है, और फिर B) से वर्णित किया जा सकता है, तो इसे विभाजित करने की आवश्यकता है।



खराब उदाहरण: एकाकी (Monolithic)

public void processOrder(Order order) {    // वैलिडेशन    if (order.getItems().isEmpty()) {        throw new IllegalArgumentException("Order is empty");    }    // लागत गणना    double total = 0;    for (Item item : order.getItems()) {        total += item.getPrice() * item.getQuantity();    }    // ईमेल भेजना    EmailService.send(order.getCustomerEmail(), "Your order total: " + total);    // DB में सेव करना    orderRepository.save(order);}

यह मेथड 4 काम करता है: वैलिडेट करता है, गणना करता है, ईमेल भेजता है और सेव करता है। अगर कुछ टूटता है, तो कारण पूरे मेथड में खोजना होगा।



अच्छा उदाहरण: स्वच्छ मेथड

public void processOrder(Order order) {    validateOrder(order);    double total = calculateTotal(order);    sendConfirmationEmail(order, total);    saveOrder(order);}

private void validateOrder(Order order) { if (order.getItems().isEmpty()) { throw new IllegalArgumentException("Order cannot be empty"); }}

private double calculateTotal(Order order) { return order.getItems().stream() .mapToDouble(item -> item.getPrice() * item.getQuantity()) .sum();}

private void sendConfirmationEmail(Order order, double total) { String message = "Your order total: " + total; EmailService.send(order.getCustomerEmail(), message);}

private void saveOrder(Order order) { orderRepository.save(order);}

हर मेथड एक ईंट है। वे

ब्लॉग

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