परिचय: आपका कोड क्यों दोबारा लिखवाया जाता है?
\n\nआपने कोड लिखा। वह काम कर रहा है। आपको खुद पर गर्व है। लेकिन कोड रिव्यू आता है, और Senior डेवलपर 15 कमेंट्स छोड़ देता है, जिनमें से आधे "क्या होगा अगर..." या "चलो इसे ऐसे लिखते हैं..." से शुरू होते हैं। परिचित लग रहा है?
\n\nPHP में कोड रिव्यू — यह नुक्स निकालना नहीं है। यह प्रोजेक्ट की उम्र बढ़ाने के लिए है। Senior डेवलपर सिर्फ "काम करता है/नहीं करता" नहीं देखते, बल्कि यह देखते हैं कि कोड लोड के तहत कैसा व्यवहार करेगा, दूसरा डेवलपर इसे कैसे मेंटेन करेगा, और छह महीने बाद बग ढूंढने में कितना समय लगेगा।
\n\nइस लेख में हम उन सबसे आम टिप्पणियों को समझेंगे जो आपको अनुभवी PHP डेवलपर से कोड रिव्यू में सुनने को मिलेंगी। मैं वास्तविक कोड उदाहरण दिखाऊंगा और समझाऊंगा कि उन्हें कैसे सुधारें। पढ़ने के बाद, आप 80% टिप्पणियों का अनुमान लगा पाएंगे और ऐसा कोड लिख पाएंगे जो दिखाने में शर्म न आए।
\n\n1. "मैजिक नंबर्स" और स्ट्रिंग्स: कोड को खुद बोलना चाहिए
\n\nसबसे पहली चीज़ जो Senior नोटिस करेगा — वे अजीब नंबर और स्ट्रिंग्स जो कोड में बिखरे हुए हैं। मैजिक नंबर्स एक एंटीपैटर्न है जो पढ़ने की क्षमता को खत्म कर देता है।
\n\nखराब उदाहरण
\nif ($user->getAge() > 18) {\n $discount = $price * 0.1;\n}\n\nSenior क्या कहेगा?
\n- \n
- 18 ही क्यों? यह वयस्कता की उम्र है या डिस्काउंट की सीमा? \n
- 0.1 क्यों? यह 10% है? क्या होगा अगर डिस्काउंट बदल जाए? \n
अच्छा उदाहरण
\nconst ADULT_AGE = 18;\nconst DISCOUNT_RATE = 0.1; // 10%\n\nif ($user->getAge() > ADULT_AGE) {\n $discount = $price * DISCOUNT_RATE;\n}\n\nअब कोड खुद कहानी सुना रहा है। Senior को मंजूरी मिलेगी: कॉन्स्टेंट्स को दोबारा इस्तेमाल किया जा सकता है, एक जगह बदला जा सकता है, और उन्हें कमेंट्स की ज़रूरत नहीं है।
\n\n2. टाइप्स की कमी: PHP 8 — डायनेमिक टाइपिंग का बहाना नहीं
\n\nPHP एक कमजोर टाइपिंग वाली भाषा है, लेकिन इसका मतलब यह नहीं कि 2005 की तरह लिखें। सख्त टाइपिंग उन बग्स से बचाती है जिन्हें पकड़ना मुश्किल होता है।
\n\nखराब उदाहरण
\nfunction calculateTotal($items, $tax) {\n $total = 0;\n foreach ($items as $item) {\n $total += $item['price'] * $item['quantity'];\n }\n return $total * (1 + $tax);\n}\n\nSenior की टिप्पणियाँ
\n- \n
$itemsक्या है? Array? Object? Collection? \n - एलिमेंट की संरचना क्या है? DTO क्यों नहीं? \n
- अगर
$taxस्ट्रिंग "0.2" के रूप में पास किया जाए? तब कॉन्केटिनेशन होगा? \n
अच्छा उदाहरण
\ndeclare(strict_types=1);\n\nclass OrderItem {\n public function __construct(\n public readonly float $price,\n public readonly int $quantity\n ) {}\n}\n\nfunction calculateTotal(array $items, float $taxRate): float {\n $total = 0.0;\n foreach ($items as $item) {\n if (!$item instanceof OrderItem) {\n throw new InvalidArgumentException('Expected OrderItem');\n }\n $total += $item->price * $item->quantity;\n }\n return $total * (1 + $taxRate);\n}\n\nSenior कहेगा: "शाबाश, तुम DTO, readonly प्रॉपर्टीज और सख्त टाइपिंग का उपयोग कर रहे हो। कोड पूर्वानुमानित है।" यह PHP 8+ की बेस्ट प्रैक्टिस है।
3. गहरी नेस्टिंग और अर्ली रिटर्न (Early Return)
\n\nजब आप एक मेथड के अंदर 5 लेवल के if...else देखते हैं, तो Senior अपना सिर पकड़ लेता है। ऐसे कोड को पढ़ना, टेस्ट करना और डीबग करना नामुमकिन है।
खराब उदाहरण
\npublic function processOrder($order) {\n if ($order->isPaid()) {\n if ($order->hasStock()) {\n if ($order->isShippable()) {\n // 50 लाइनों की लॉजिक\n return $this->ship($order);\n } else {\n throw new \\Exception('Order cannot be shipped');\n }\n } else {\n throw new \\Exception('Out of stock');\n }\n } else {\n throw new \\Exception('Order not paid');\n }\