जावा कोड रिव्यू: सीनियर क्या देखते हैं और कोड-रिव्यू में कैसे फेल न हों

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

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

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

जावा कोड रिव्यू: सीनियर क्या देखते हैं और कोड-रिव्यू में कैसे फेल न हों

\n\n

आपने कोड लिखा, इसे लोकली चेक किया, टेस्ट चलाए — सब ग्रीन। आप Pull Request खोलते हैं और कुछ घंटों बाद सीनियर कलीग से दर्जन भर कमेंट देखते हैं। परिचित लगता है? जावा कोड रिव्यू कोई नौकरशाही प्रक्रिया नहीं है, बल्कि डेवलपर की परिपक्वता की एक वास्तविक परीक्षा है। सीनियर कोड को अलग तरह से देखते हैं: वे सिर्फ यह नहीं जांचते कि यह काम करता है या नहीं, बल्कि देखते हैं कि यह कितने समय तक काम करेगा और इसे बदलना कितना मुश्किल होगा।

\n\n

इस लेख में, हम उन सबसे सामान्य टिप्पणियों पर चर्चा करेंगे जो अनुभवी जावा डेवलपर कोड रिव्यू में छोड़ते हैं। आप सीखेंगे कि कैसे साफ, मेंटेन करने योग्य कोड लिखें और पहली बार में रिव्यू पास करें।

\n\n

1. SOLID सिद्धांतों और स्वच्छ आर्किटेक्चर की अनदेखी

\n\n

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

\n\n

खराब कोड का उदाहरण:

\n\n
public class OrderService {\n    public void processOrder(Order order) {\n        // 1. वैलिडेशन\n        if (order.getItems().isEmpty()) {\n            throw new IllegalArgumentException("Order must have items");\n        }\n        // 2. उपयोगकर्ता जांच\n        User user = userRepository.findById(order.getUserId());\n        if (user == null || user.isBlocked()) {\n            throw new SecurityException("User not valid");\n        }\n        // 3. छूट की गणना\n        double discount = 0;\n        if (order.getTotal() > 1000) {\n            discount = 0.1;\n        }\n        // 4. सेव करना\n        order.setDiscount(discount);\n        orderRepository.save(order);\n        // 5. ईमेल भेजना\n        emailService.sendOrderConfirmation(order);\n    }\n}
\n\n

सीनियर क्या कहेगा: "यह मेथड Single Responsibility Principle का उल्लंघन करता है। यह वैलिडेशन, गणना, सेविंग और नोटिफिकेशन भेजने के लिए जिम्मेदार है। इसे अलग-अलग मेथड में बांटें या अलग-अलग सर्विसेज में डालें।"

\n\n

कैसे सुधारें:

\n\n
public class OrderService {\n    private final OrderValidator validator;\n    private final DiscountCalculator discountCalculator;\n    private final OrderRepository orderRepository;\n    private final NotificationService notificationService;\n\n    public void processOrder(Order order) {\n        validator.validate(order);\n        double discount = discountCalculator.calculate(order);\n        order.setDiscount(discount);\n        orderRepository.save(order);\n        notificationService.sendOrderConfirmation(order);\n    }\n}
\n\n

जावा डेवलपमेंट में एकल जिम्मेदारी का सिद्धांत बुनियादी है। यदि आप किसी मेथड में "and" (जांचें और सेव करें और भेजें) शब्द देखते हैं, तो रिफैक्टर करने का समय आ गया है।

\n\n

2. null और NPE (NullPointerException) के साथ काम करना

\n\n

NullPointerException जावा डेवलपर्स का अभिशाप है। सीनियर अप्रत्याशित NPE से नफरत करते हैं और हमेशा ध्यान देते हैं कि आप null के साथ कैसे काम करते हैं। सामान्य टिप्पणी: "अगर मेथड null लौटाता है तो क्या होगा?"

\n\n

उदाहरण:

\n\n
public String getUserEmail(Long userId) {\n    User user = userRepository.findById(userId);\n    return user.getEmail().toLowerCase();\n}
\n\n

सीनियर की टिप्पणी: "अगर उपयोगकर्ता नहीं मिलता है, तो user null होगा — हमें NPE मिलेगा। Optional का उपयोग करें या कम से कम जांच करें।"

\n\n

सुधारा गया संस्करण:

\n\n
public String getUserEmail(Long userId) {\n    return userRepository.findById(userId)\n            .map(User::getEmail)\n            .map(String::toLowerCase)\n            .orElseThrow(() -> new UserNotFoundException("User not found: " + userId));\n}
\n\n

Optional का उपयोग आधुनिक जावा में एक मानक है।

ब्लॉग

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