C# पर कोड रिव्यू: सिर्फ एक टिक नहीं, बल्कि प्रोडक्शन की सुरक्षा
\n\nक्या आपने कभी ऐसा कोड देखा है जो काम तो करता है, लेकिन जिसे देखकर आँखें बंद करने का मन करता है? "मैजिक नंबर", लूप के अंदर लूप, async void और null जहाँ होना नहीं चाहिए। C# पर कोड रिव्यू कोई नौकरशाही प्रक्रिया नहीं है, बल्कि बग के प्रोडक्शन में जाने से पहले की आखिरी सुरक्षा पंक्ति है। या, इससे भी बुरा, इससे पहले कि आपके सहकर्मी कोड को मेंटेन करना शुरू करें, लेखक को कोसते हुए।
इस लेख में, हम चर्चा करेंगे कि C# कोड की समीक्षा करते समय वास्तव में किन बातों पर ध्यान देना चाहिए। कोई बेकार की बात नहीं - केवल विशिष्ट मामले, एंटी-पैटर्न और उदाहरण। यदि आप जूनियर हैं - यह आपकी चेकलिस्ट है। यदि आप सीनियर हैं - अपनी याददाश्त ताज़ा करें। चलिए शुरू करते हैं।
\n\n1. Null - C# डेवलपर का मुख्य दुश्मन
\n\nप्रसिद्ध NullReferenceException - लाखों नींद हराम रातों का कारण। कोड रिव्यू में सबसे पहले हम क्या जाँचते हैं: null से सुरक्षा।
क्या चिंताजनक होना चाहिए?
\n- \n
- प्रॉपर्टीज तक पहुँचने से पहले
nullकी जाँच का अभाव। \n - उन विधियों से
nullलौटाना जहाँ कलेक्शन की अपेक्षा होती है। \n - nullable-संदर्भों को अनदेखा करना (
#nullable enable)। \n
खराब:
\npublic string GetUserName(User user)\n{\n return user.Name.ToUpper(); // user null हो सकता है!\n}\n\nअच्छा (C# 8+):
\npublic string GetUserName(User? user)\n{\n return user?.Name?.ToUpper() ?? "Unknown";\n}\n\nकोड रिव्यू के लिए सलाह: नए प्रोजेक्ट्स में Nullable को चालू करने की आवश्यकता रखें। यह सिर्फ फैशन नहीं है, यह बेवकूफी भरी गलतियों से बचाता है। C# कोड रिव्यू बिना nullable जाँच के - सीट बेल्ट के बिना गाड़ी चलाने जैसा है।
2. एसिंक्रोनसिटी: async/await बिना गड़बड़ी के
\n\nC# में एसिंक्रोनस प्रोग्रामिंग एक शक्तिशाली उपकरण है, लेकिन गलत उपयोग पर यह एक टाइम बम बन जाता है। समीक्षा में हम तीन मुख्य पापों की जाँच करते हैं।
\n\nपाप #1: async void
\nasync void विधियों को ट्रैक नहीं किया जा सकता - अपवाद फाइनल थ्रेड में गिरेगा और प्रक्रिया को मार डालेगा। केवल इवेंट हैंडलर्स (जैसे WinForms में बटन) के लिए स्वीकार्य है।
खराब:
\npublic async void LoadDataAsync()\n{\n var data = await _service.GetDataAsync(); // त्रुटि प्रक्रिया को मार देगी\n}\n\nअच्छा:
\npublic async Task LoadDataAsync()\n{\n var data = await _service.GetDataAsync();\n}\n\nपाप #2: एसिंक्रोनस कोड को ब्लॉक करना
\nएसिंक्रोनस संदर्भ में .Result या .Wait() डेडलॉक का सीधा रास्ता है।
खराब:
\nvar result = _service.GetDataAsync().Result; // UI एप्लिकेशन में डेडलॉक\n\nअच्छा:
\nvar result = await _service.GetDataAsync();\n\nपाप #3: CancellationToken का अभाव
\nलंबे ऑपरेशन रद्द करने योग्य होने चाहिए। यदि विधि के सिग्नेचर में CancellationToken नहीं है, तो लेखक से पूछें: "अगर उपयोगकर्ता टैब बंद कर दे तो क्या होगा?"
3. LINQ: सुंदरता या धीमी मौत?
\n\nLINQ सुरुचिपूर्ण है। लेकिन कोड रिव्यू अक्सर खुलासा करता है कि इस सुरुचिपूर्णता के पीछे O(n²) या कलेक्शन पर कई पास छिपे होते हैं।
\n\nLINQ के साथ C# कोड की समीक्षा में सामान्य गलतियाँ:
\n- \n
- एकाधिक ट्रैवर्सल:
.Count() > 0+.First()- दो पास।.Any()और.FirstOrDefault()का उपयोग करें। \n - भूला हुआ ToList(): आलसी लोडिंग के कारण DB क्वेरी DataReader संदर्भ बंद होने के बाद निष्पादित हो सकती है। \n
- Where + Select = अतिरेक: यदि एक
SelectManyका उपयोग किया जा सकता है, तो करें। \n
उदाहरण जो लाल झंडा उठाना चाहिए:
\nvar result = l