परिचय: code review "बग ढूँढना" क्यों नहीं है
\nCode review (कोड रिव्यू) केवल एक औपचारिकता या टाइपो ढूँढने का तरीका नहीं है। JavaScript और Node.js पर आधुनिक डेवलपमेंट में, यह कोड की गुणवत्ता बनाए रखने, टीम में ज्ञान साझा करने और तकनीकी ऋण को रोकने का मुख्य उपकरण है। हालाँकि, कई डेवलपर रिव्यू को केवल सिंटैक्स जाँच तक सीमित कर देते हैं, जिससे आर्किटेक्चरल समस्याएँ, प्रदर्शन और पठनीयता छूट जाती है।
\nइस लेख में, हम विस्तार से देखेंगे कि JavaScript कोड में वास्तव में क्या जाँचना चाहिए (Node.js के उदाहरण के साथ), और फीडबैक कैसे दें ताकि सहकर्मी को ठेस न पहुँचे, बल्कि उसे बढ़ने में मदद मिले। कोड के व्यावहारिक उदाहरण सामग्री को मजबूत करने में मदद करेंगे।
\n\n1. JavaScript कोड में क्या जाँचें: व्यावहारिक चेकलिस्ट
\nआइए जाँच के विशिष्ट बिंदुओं से शुरू करें। उन्हें तीन स्तरों में विभाजित करें: सिंटैक्स/शैली, तर्क/सुरक्षा और आर्किटेक्चर।
\n\n1.1. कोड शैली और फ़ॉर्मेटिंग
\nयहाँ सब कुछ सरल है: लिंटर (ESLint) और फ़ॉर्मेटर (Prettier) का उपयोग करें। रिव्यू में स्पेस को लेकर बहस नहीं होनी चाहिए। प्रोजेक्ट में एक बार कॉन्फ़िग सेट करें। जाँचें कि:
\n- \n
- कोड
eslint-config-airbnbया आपकी कस्टम सेटिंग्स के नियमों का पालन करता है। \n - कोई अनावश्यक
console.logनहीं है (यदि यह dev मोड नहीं है)। \n - वेरिएबल के नाम सार्थक हैं:
const userData, न किconst x। \n
1.2. एसिंक्रोनसिटी (Promise, async/await) के साथ काम करने का तर्क
\nNode.js में यह त्रुटियों का एक सामान्य क्षेत्र है। जाँचें:
\n- \n
- एसिंक्रोनस फ़ंक्शन में त्रुटि प्रबंधन।
try/catchकी अनुपस्थिति प्रक्रिया को क्रैश कर सकती है। \n - लूप के अंदर
awaitका सही उपयोग। यदि कार्य एक-दूसरे पर निर्भर नहीं हैं, तोPromise.allका उपयोग करें। \n
खराब:
\n// अनुक्रमिक निष्पादन, जबकि समानांतर किया जा सकता था\nconst results = [];\nfor (const id of ids) {\n const data = await fetchData(id); // प्रत्येक अनुरोध की प्रतीक्षा करें\n results.push(data);\n}\n\nअच्छा:
\n// समानांतर निष्पादन\nconst promises = ids.map(id => fetchData(id));\nconst results = await Promise.all(promises);\n\n\n1.3. सुरक्षा और मेमोरी लीक
\nNode.js के लिए महत्वपूर्ण:
\n- \n
- इंजेक्शन का अभाव: अत्यंत आवश्यकता के बिना
evalयाnew Functionका उपयोग न करें। \n - स्ट्रीम, DB कनेक्शन और फ़ाइल डिस्क्रिप्टर को बंद करना। \n
- इनपुट डेटा का सत्यापन। अनुरोध बॉडी (
req.body) पर कभी भरोसा न करें। \n
2. फीडबैक कैसे दें: मनोविज्ञान और रणनीति
\nएक आदर्श जाँच सूची भी काम नहीं करेगी यदि फीडबैक कोड लेखक में PR बंद करने और नौकरी छोड़ने की इच्छा जगाए। यहाँ कुछ नियम हैं।
\n\n2.1. "सैंडविच" नियम (वैकल्पिक लेकिन प्रभावी)
\nसकारात्मक टिप्पणी से शुरू करें, फिर समस्या बताएँ, और समर्थन के साथ समाप्त करें। उदाहरण के लिए:
\n- \n
- "कैशिंग के लिए
Mapका उपयोग करने का शानदार समाधान!" \n - "हालाँकि, यहाँ मूल ऐरे के म्यूटेशन की संभावित समस्या है। आइए
.forEach()के साथ push के बजाय.map()का उपयोग करें।" \n - "बाकी कोड साफ है, त्वरित फिक्स के लिए धन्यवाद!" \n
2.2. कोड पर टिप्पणी करें, व्यक्ति पर नहीं
\n"तुमने भयानक लूप लिखा है" कहने के बजाय कहें "इस लूप को पठनीयता में सुधार के लिए Array.reduce से बदला जा सकता है"। नकारात्मक संदर्भ में सर्वनाम "तुम" से बचें।
2.3. संदर्भ और विकल्प दें
\nसिर्फ "यह गलत है" लिखना खराब है। क्यों समझाएँ और एक विकल्प सुझाएँ। खराब टिप्पणी का उदाहरण:
\n"var का उपयोग न करें।"\n
अच्छी टिप्पणी:
\n"यहाँvarवेरिएबल को ग्लोबल स्कोप में बनाता है, जिससे बग हो सकते हैं। आइए इसेconstसे बदलें, क्योंकि मान पुनः असाइन नहीं हो रहा है।"