C# पर कोड रिव्यू: क्या जाँचें ताकि कोड खराब न हो

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

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

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

C# पर कोड रिव्यू: सिर्फ एक टिक नहीं, बल्कि प्रोडक्शन की सुरक्षा

\n\n

क्या आपने कभी ऐसा कोड देखा है जो काम तो करता है, लेकिन जिसे देखकर आँखें बंद करने का मन करता है? "मैजिक नंबर", लूप के अंदर लूप, async void और null जहाँ होना नहीं चाहिए। C# पर कोड रिव्यू कोई नौकरशाही प्रक्रिया नहीं है, बल्कि बग के प्रोडक्शन में जाने से पहले की आखिरी सुरक्षा पंक्ति है। या, इससे भी बुरा, इससे पहले कि आपके सहकर्मी कोड को मेंटेन करना शुरू करें, लेखक को कोसते हुए।

\n\n

इस लेख में, हम चर्चा करेंगे कि C# कोड की समीक्षा करते समय वास्तव में किन बातों पर ध्यान देना चाहिए। कोई बेकार की बात नहीं - केवल विशिष्ट मामले, एंटी-पैटर्न और उदाहरण। यदि आप जूनियर हैं - यह आपकी चेकलिस्ट है। यदि आप सीनियर हैं - अपनी याददाश्त ताज़ा करें। चलिए शुरू करते हैं।

\n\n

1. Null - C# डेवलपर का मुख्य दुश्मन

\n\n

प्रसिद्ध NullReferenceException - लाखों नींद हराम रातों का कारण। कोड रिव्यू में सबसे पहले हम क्या जाँचते हैं: null से सुरक्षा।

\n\n

क्या चिंताजनक होना चाहिए?

\n
    \n
  • प्रॉपर्टीज तक पहुँचने से पहले null की जाँच का अभाव।
  • \n
  • उन विधियों से null लौटाना जहाँ कलेक्शन की अपेक्षा होती है।
  • \n
  • nullable-संदर्भों को अनदेखा करना (#nullable enable)।
  • \n
\n\n

खराब:

\n
public string GetUserName(User user)\n{\n    return user.Name.ToUpper(); // user null हो सकता है!\n}
\n\n

अच्छा (C# 8+):

\n
public string GetUserName(User? user)\n{\n    return user?.Name?.ToUpper() ?? "Unknown";\n}
\n\n

कोड रिव्यू के लिए सलाह: नए प्रोजेक्ट्स में Nullable को चालू करने की आवश्यकता रखें। यह सिर्फ फैशन नहीं है, यह बेवकूफी भरी गलतियों से बचाता है। C# कोड रिव्यू बिना nullable जाँच के - सीट बेल्ट के बिना गाड़ी चलाने जैसा है।

\n\n

2. एसिंक्रोनसिटी: async/await बिना गड़बड़ी के

\n\n

C# में एसिंक्रोनस प्रोग्रामिंग एक शक्तिशाली उपकरण है, लेकिन गलत उपयोग पर यह एक टाइम बम बन जाता है। समीक्षा में हम तीन मुख्य पापों की जाँच करते हैं।

\n\n

पाप #1: async void

\n

async void विधियों को ट्रैक नहीं किया जा सकता - अपवाद फाइनल थ्रेड में गिरेगा और प्रक्रिया को मार डालेगा। केवल इवेंट हैंडलर्स (जैसे WinForms में बटन) के लिए स्वीकार्य है।

\n\n

खराब:

\n
public async void LoadDataAsync()\n{\n    var data = await _service.GetDataAsync(); // त्रुटि प्रक्रिया को मार देगी\n}
\n\n

अच्छा:

\n
public async Task LoadDataAsync()\n{\n    var data = await _service.GetDataAsync();\n}
\n\n

पाप #2: एसिंक्रोनस कोड को ब्लॉक करना

\n

एसिंक्रोनस संदर्भ में .Result या .Wait() डेडलॉक का सीधा रास्ता है।

\n\n

खराब:

\n
var result = _service.GetDataAsync().Result; // UI एप्लिकेशन में डेडलॉक
\n\n

अच्छा:

\n
var result = await _service.GetDataAsync();
\n\n

पाप #3: CancellationToken का अभाव

\n

लंबे ऑपरेशन रद्द करने योग्य होने चाहिए। यदि विधि के सिग्नेचर में CancellationToken नहीं है, तो लेखक से पूछें: "अगर उपयोगकर्ता टैब बंद कर दे तो क्या होगा?"

\n\n

3. LINQ: सुंदरता या धीमी मौत?

\n\n

LINQ सुरुचिपूर्ण है। लेकिन कोड रिव्यू अक्सर खुलासा करता है कि इस सुरुचिपूर्णता के पीछे O(n²) या कलेक्शन पर कई पास छिपे होते हैं।

\n\n

LINQ के साथ C# कोड की समीक्षा में सामान्य गलतियाँ:

\n
    \n
  • एकाधिक ट्रैवर्सल: .Count() > 0 + .First() - दो पास। .Any() और .FirstOrDefault() का उपयोग करें।
  • \n
  • भूला हुआ ToList(): आलसी लोडिंग के कारण DB क्वेरी DataReader संदर्भ बंद होने के बाद निष्पादित हो सकती है।
  • \n
  • Where + Select = अतिरेक: यदि एक SelectMany का उपयोग किया जा सकता है, तो करें।
  • \n
\n\n

उदाहरण जो लाल झंडा उठाना चाहिए:

\n
var result = l                

ब्लॉग

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