Kotlin में कोड रिव्यू: क्या जाँचें और फीडबैक कैसे दें
कोड रिव्यू कोड की गुणवत्ता बनाए रखने, टीम में ज्ञान साझा करने और बग्स को रोकने के सबसे प्रभावी उपकरणों में से एक है। हालांकि, पुल-रिक्वेस्ट को केवल "आँखें दौड़ाना" पर्याप्त नहीं है। Kotlin भाषा में, इसकी समृद्ध टाइप सिस्टम, कोरूटीन और कार्यात्मक क्षमताओं के साथ, विशिष्ट बिंदुओं पर ध्यान देना महत्वपूर्ण है। इस लेख में, हम विश्लेषण करेंगे कि Kotlin कोड की समीक्षा करते समय वास्तव में क्या देखना चाहिए, और टिप्पणियाँ कैसे तैयार करें ताकि वे लाभदायक हों, न कि अपमानजनक।
1. रचनात्मक फीडबैक के मूल सिद्धांत
तकनीकी विवरणों पर जाने से पहले, आइए कुछ नियमों को याद करें जो कोड रिव्यू को सभी प्रतिभागियों के लिए उपयोगी बनाते हैं।
कोड पर ध्यान दें, लेखक पर नहीं
"आपने खराब कोड लिखा" कहने के बजाय कहें "इस विधि को let का उपयोग करके सरल बनाया जा सकता है"। विशिष्टता और तटस्थ स्वर तनाव को कम करते हैं।
श्रेणियों में विभाजन
टिप्पणियों को इस प्रकार चिह्नित करें:
- Blocking — अनिवार्य रूप से ठीक करें (तार्किक त्रुटि, संसाधन रिसाव)।
- Nitpick — छोटी-मोटी बातें (शैली, फ़ॉर्मेटिंग)।
- Question — स्पष्टीकरण (इरादा स्पष्ट नहीं)।
"क्यों" की व्याख्या करें
केवल " filterNotNull() का उपयोग करें" कहना पर्याप्त नहीं है। जोड़ें: "यह एक अतिरिक्त लूप से बचाएगा और कोड को स्व-दस्तावेजीकरण बनाएगा"। इस तरह लेखक सीखता है, न कि केवल सुधार करता है।
2. Null safety और टाइप: Kotlin के मुख्य सहयोगी
Kotlin को इस तरह डिज़ाइन किया गया है कि कंपाइलेशन स्तर पर NullPointerException से बचा जा सके। जाँचें कि क्या यह सुरक्षा भंग हुई है।
अनावश्यक !! (not-null assertion) से बचें
ऑपरेटर !! मदद की पुकार है। इसका उपयोग अपवाद होना चाहिए, नियम नहीं।
// बुरा: NPE का जोखिमfun process(user: User?) { val name = user!!.name}
// अच्छा: सुरक्षित कॉलfun process(user: User?) { val name = user?.name ?: "अतिथि"}क्या जाँचें: यदि !! दिखे, तो लेखक से पूछें कि क्या इसे ?.let, ?: (elvis) या requireNotNull() से बदला जा सकता है।
nullable-टाइप का सही उपयोग
सभी पैरामीटर nullable होने चाहिए, यह आवश्यक नहीं है। यदि फ़ंक्शन हमेशा एक मान की अपेक्षा करता है, तो प्रश्न चिह्न के बिना टाइप घोषित करें।
// विवादास्पद: null का कोई मतलब नहींfun log(message: String?) { println(message ?: "null")}
// बेहतर: स्पष्ट आवश्यकताfun log(message: String) { println(message)}3. कोरूटीन और थ्रेड: बिना दर्द के एसिंक्रोनस
Kotlin Coroutines एक शक्तिशाली उपकरण है, लेकिन इनका गलत उपयोग करना आसान है। रिव्यू करते समय निम्नलिखित बिंदुओं पर ध्यान दें।
कार्यों के लिए सही डिस्पैचर
लंबे ऑपरेशन (नेटवर्क, डिस्क) को Dispatchers.Main पर न चलाएँ।
// बुरा: UI को ब्लॉक करता हैGlobalScope.launch(Dispatchers.Main) { val data = fetchFromNetwork() // हैंग}
// अच्छा: कॉन्टेक्स्ट स्विचिंगviewModelScope.launch { val data = withContext(Dispatchers.IO) { fetchFromNetwork() } updateUI(data)}कोरूटीन रिसाव और structured concurrency
GlobalScope के बजाय viewModelScope, lifecycleScope या coroutineScope का उपयोग करें। GlobalScope तब तक जीवित रहता है जब तक एप्लिकेशन जीवित है, और आसानी से रिसाव का कारण बनता है।
// खतरनाक: रिसावGlobalScope.launch { /* ... */ }
// सुरक्षित: जीवनचक्र से बंधाlifecycleScope.launch { /* ... */ }4. कलेक्शन और कार्यात्मक शैली: संक्षिप्तता और पठनीयता
Kotlin कलेक्शन के साथ काम करने के लिए एक समृद्ध लाइब्रेरी प्रदान करता है। स्पष्ट लूप के बजाय इसका उपयोग करें।
म्यूटेशन के बजाय चेन
यदि परिणाम एक साथ एकत्र किया जा सकता है, तो सूची में मैन्युअल रूप से जोड़ने से बचें।