क्या पैरामीटर नामों का उपयोग करना जो केवल C # में एक बुरा अभ्यास माना जाने वाले आवरण के प्रकार से भिन्न होता है?


43

मैं कक्षा के गुणों से मेल खाने वाले पैरामीटर नामों के संबंध में इसी तरह के प्रश्न देखता हूं, लेकिन मुझे पैरामीटर नाम का उपयोग करने के संबंध में कुछ भी नहीं मिल सकता है जो सी # में आवरण के अलावा पैरामीटर प्रकार नाम के समान है। यह एक उल्लंघन नहीं लगता है जो मुझे मिल सकता है, लेकिन क्या इसे बुरा व्यवहार माना जाता है? उदाहरण के लिए, मेरे पास निम्न विधि है

public Range PadRange(Range range) {}

यह विधि एक सीमा लेती है, और एक नई सीमा लौटाती है जिसमें कुछ पेडिंग लागू होती है। इसलिए, सामान्य संदर्भ को देखते हुए, मैं पैरामीटर के लिए अधिक वर्णनात्मक नाम के बारे में नहीं सोच सकता। हालाँकि, मुझे याद आ रहा है कि जब "मनोवैज्ञानिक दूरी" के बारे में कोड पूरा पढ़ने पर मुझे कोई टिप दी गई थी। इसे कहते हैं

मनोवैज्ञानिक दूरी को उस आसानी के रूप में परिभाषित किया जा सकता है जिसमें दो वस्तुओं को विभेदित किया जा सकता है ... जैसा कि आप डिबग करते हैं, समान वैरिएबल नामों के बीच और समान दिनचर्या के नामों के बीच अपर्याप्त मनोवैज्ञानिक दूरी के कारण होने वाली समस्याओं के लिए तैयार रहें। जैसा कि आप कोड का निर्माण करते हैं, बड़े अंतर वाले नामों का चयन करें ताकि आप समस्या से बच सकें।

मेरे विधि हस्ताक्षर में "रेंज" का एक बहुत कुछ चल रहा है, इसलिए ऐसा महसूस होता है कि यह इस मनोवैज्ञानिक दूरी के संबंध में एक मुद्दा हो सकता है। अब, मैं देख रहा हूँ कि कई डेवलपर्स निम्नलिखित कार्य करते हैं

public Range PadRange(Range myRange) {}

मुझे व्यक्तिगत रूप से इस सम्मेलन के लिए एक मजबूत अरुचि है। चर नामों में "मेरे" उपसर्ग जोड़ना कोई अतिरिक्त संदर्भ प्रदान नहीं करता है।

मैं निम्नलिखित भी देखता हूं

public Range PadRange(Range rangeToPad) {}

मुझे "मेरे" उपसर्ग से बेहतर यह पसंद है, लेकिन अभी भी इसके लिए समग्र रूप से परवाह नहीं है। यह सिर्फ मुझ पर अत्यधिक लगता है, और एक चर नाम के रूप में अजीब रूप से पढ़ता है। मेरे लिए, यह समझा जाता है कि विधि नाम की वजह से सीमा को गद्देदार किया जाएगा।

तो इस सब के साथ, मेरा पेट पहले हस्ताक्षर के साथ जाना है। मेरे लिए, यह साफ है। जब जरूरत न हो तो संदर्भ को मजबूर करने की जरूरत नहीं है। लेकिन क्या मैं खुद या भविष्य के डेवलपर्स को इस अधिवेशन से दूर कर रहा हूं? क्या मैं एक सर्वोत्तम अभ्यास का उल्लंघन कर रहा हूं?


35
यदि आप अधिक वर्णनात्मक पैरामीटर के साथ नहीं आ सकते हैं, Range rangeतो ठीक है।
रॉबर्ट हार्वे

21
इस स्थिति में, आईडीई 'रेंज' और 'रेंज' को अलग-अलग रंग देगा, इसलिए यह देखना वास्तव में आसान है कि एक प्रकार है और एक चर नाम है।
17 की 26

10
हाँ, मुझे याद है। यह एक विचार के रूप में उनके डिजाइन दिशानिर्देशों में है। "किसी संपत्ति को उसके प्रकार के समान नाम देने वाला विचार।" docs.microsoft.com/en-us/dotnet/standard/design-guidelines/…
जेसन टायलर

11
इसके अलावा ठीक है: Range r(कम से कम एक छोटी विधि शरीर के लिए) और Range toPad
बर्गी

19
मैं हमेशा "मेरे" उपसर्ग को कुछ ऐसा मानता था जो उदाहरण कोड में किया जाता है जहां इसका उपयोग पाठक को इंगित करता था कि संदर्भ के आधार पर एक नाम को कुछ और में बदल दिया जाना चाहिए। यह ऐसा कुछ नहीं है जो वास्तव में किसी भी वास्तविक कोड में समाप्त होना चाहिए।
kapex

जवाबों:


100

इस पर काबू मत करो, Range rangeठीक है। मैं सी # में 15 से अधिक वर्षों के लिए इस तरह के नामकरण का उपयोग करता हूं, और शायद सी ++ में अधिक समय तक रहता हूं, और इसके विपरीत कभी भी वास्तविक कमियों का अनुभव नहीं किया है।

बेशक, जब आपके पास एक ही दायरे में अलग-अलग स्थानीय चर होते हैं, तो सभी एक ही प्रकार के होते हैं, तो यह संभवत: उन्हें ठीक से अलग करने के लिए कुछ मानसिक प्रयास करने में मदद करेगा।


6
एक और अपवाद मैं तब जोड़ूंगा जब उस पर एक विशेष कार्रवाई की जा रही हो। उदाहरण के लिए पैरामीटर की आवश्यकता क्यों है, इसके बारे में अधिक वर्णनात्मक होने के लिए थोड़ा सा स्थान है। Wack (Bozo bozoToBeWacked) और भी अधिक अगर पैरामीटर वैकल्पिक है और वर्णन करता है कि उस परिदृश्य में ऑब्जेक्ट का क्या अर्थ है / इसका क्या प्रभाव पड़ेगा। मेरे अंगूठे का नियम अगर यह कोड को देखे बिना स्पष्ट नहीं है कि पैरामीटर क्या करता है तो उसे एक बेहतर नाम और / या टिप्पणियों की आवश्यकता होती है।
माइक

17
मैं Wack(Bozo bozoToBeWacked)चर नाम में अतिरेक के एक उदाहरण के रूप में मानता हूं जो कि विधि द्वारा ही व्यक्त किया गया है (और मूल प्रश्न के अनुसार अवांछनीय है)। Wack(Person bozo)हालाँकि, यह शब्दार्थ है कि यह केवल बोज़ोस के निराकरण के लिए अपेक्षित है।
मिरल

2
यदि आप दूसरे पैराग्राफ में उल्लेख करते हैं, तो मैं अक्सर पैरामीटर का नाम कुछ इस तरह बदल दूंगा initialRange। यह अभी भी बहुत सामान्य है, लेकिन इसमें लगभग समान स्तर की अरुचि नहीं है myRange
Jaquez

@ मिरल: जैसे मामलों में यह अधिक प्रासंगिक हो जाता है Punch(Bozo punchingBozo, Bozo bozoToBePunched)। विस्तृत नामकरण तब अधिक प्रासंगिक होता है जब आपको कई चीजों के बीच अंतर करना पड़ता है (जो शब्दार्थ रूप से बहुत समान शब्दों के साथ वर्णित हैं)। ओपी का सुझाव Range rangeToPadउसके एक पैरामीटर विधि उदाहरण में आवश्यक नहीं है, लेकिन कई Rangeवस्तुओं में एक विधि के लिए अविश्वसनीय रूप से आवश्यक हो सकता है ।
फ्लटर

7
@ फलाहार Punch(Bozo source, Bozo target)नौकरी करेगा
थॉमस अय्यूब

17

मैं हर समय ऐसा करता हूं, यह मुझे बहुत अच्छा लगता है। यदि यह एक कंस्ट्रक्टर को दिया गया एक तर्क है जिसे किसी सदस्य को सौंपा जाना है, तो मेरे सदस्य का नाम सीमा और असाइनमेंट होगा।

this.range = range;

और मेरे पास आम तौर पर रेंज नाम की एक संपत्ति होगी।

वे सभी एक ही चीज हैं, केवल संदर्भ में भिन्न हैं इसलिए यह एक नाम बनाए रखने के लिए समझ में आता है और आपको केवल एक नाम याद रखना होगा। यह एक बात है, मतभेद विशुद्ध रूप से तकनीकी हैं।

आपको "यह" पूरी तरह से योग्य सदस्यों के साथ सख्त होना चाहिए। हालाँकि, लेकिन यह है कि StyleCop के लिए क्या है।

स्टाइलकॉप साइड नोट

विवाद की गारंटी!

"यह" के उपयोग की वकालत करने वालों को: मैंने _, m, m_ और सिर्फ कुछ भी नहीं देखा है। भाषा ही हमें एक पूरी तरह से स्पष्ट, स्पष्ट रूप से स्पष्ट रूप से पहचानने योग्य तरीका बता रही है कि हम एक वर्ग के सदस्य के साथ काम कर रहे हैं। पृथ्वी पर आप अपना खुद का तरीका क्यों बनाना चाहेंगे जो पहले से ही सही नामों को बदल देता है?

एकमात्र कारण मैं इसके बारे में सोच सकता हूं कि यह सी युग से एक विरासत की आदत है, जब यह वास्तव में इसे करने के लिए समझ में आया क्योंकि कोई अन्य रास्ता नहीं था।

"यह अधिक वर्ण है!" गंभीरता से? "संकलन का समय आसमान छूएगा!" गंभीरता से? "मुझे टाइप करते समय अपनी पिंकी को उठाना पड़ेगा!"। जैसे कि टंकण समय का कुल विकास समय में कोई महत्व था।

मैं मानता हूं कि किसी भी शैली का आप जो उपयोग करते हैं, उससे कुछ विरोध पैदा होगा। लेकिन इसके लगातार उपयोग से बहस करना मुश्किल है। यहां बताया गया है कि यह मेरे लिए कैसे काम करता है: इससे पहले कि मैं एक नई कोड फ़ाइल पुश करूं, जिसे मैं स्टाइलकॉप चलाता हूं और इसमें कई सदस्यों की कमी होगी, जो इस "क्वालीफायर" का अभाव है। मैंने "यह" डाल दिया। क्लिपबोर्ड पर, सदस्यों द्वारा चलाएं और डालें। कोई प्रयास नहीं।

स्टाइलकॉप इससे बहुत कुछ करता है (हाहा)। कई तरीके हैं जो एक डेवलपर (केवल कोड स्वरूपण पर विचार कर सकता है) अपने उत्तराधिकारी के रखरखाव कार्य को निराश करता है। StyleCop उनमें से ज्यादातर को रोकता है। यह अमूल्य है।

यदि आप इसके लिए नए हैं: यह आम तौर पर आपको एक या दो सप्ताह के लिए परेशान कर देता है और फिर आप इसे पसंद करेंगे।


19
" आपको" यह "के साथ पूरी तरह से योग्य सदस्यों के साथ सख्त होना चाहिए, हालांकि, " -1। thisजब आवश्यक हो तब को छोड़कर उपयोग न करें । यह सिर्फ शोर है अन्यथा। _rangeक्षेत्र के लिए उपयोग करें और thisविस्तार विधियों को छोड़कर कभी भी इसकी आवश्यकता नहीं है।
डेविड अरनो

12
मैं @DavidArno के साथ हूं। 'यह' सिर्फ शुद्ध शोर है। 'श्रेणी' एक संपत्ति है, '_range' एक क्षेत्र है, और 'श्रेणी' एक पैरामीटर है।
17 की 26

8
@ डेविड यदि चर एक वर्ग का सदस्य है, तो यह आवश्यक है और यह संकेत करने के लिए किसी भी मनमाने ढंग से उपसर्ग को धड़कता है कि आप तर्क या स्थानीय चर के बजाय कक्षा के सदस्य को देख रहे हैं।
मार्टिन माट

6
मेरी आईडीई आग के गोले दागेगी दूसरी मैं खुद को एक चर सौंप दूंगा।
कोकजे

21
@DavidArno देखभाल करने के लिए समझाने के लिए "शोर" का शोर _बेहतर क्यों है this.? मैं तर्क दूंगा कि एक का अर्थ भाषा द्वारा लागू किया गया (और आमतौर पर वाक्य रचना हाइलाइटिंग है) जबकि दूसरा नहीं करता है।
क्लिंट

9

नामकरण विधियों, मापदंडों और चर पर मेरा आत्म-मार्गदर्शन बहुत सरल है:

  1. यदि नाम में वह प्रकार शामिल है जिसे पारित किया जा रहा है या वापस लौटाया जा रहा है, तो आप इसे गलत कर रहे हैं।
  2. उन चीज़ों को नाम दें, जिनके लिए उनका इरादा है, न कि वे क्या हैं।
  3. हमेशा याद रखें कि कोड जितना लिखा गया है, उससे अधिक पढ़ा जाता है।

इस प्रकार, मेरी राय में, इष्टतम तरीका हस्ताक्षर होगा:

Range Pad(Range toPad)

विधि नाम को छोटा करना आत्म-व्याख्यात्मक है।

पैरामीटर नाम toPadतुरंत पाठक को बताता है कि उस पैरामीटर को संभवत: गद्देदार होने के द्वारा संशोधित किया जा रहा है, फिर वापस आ गया। इसके विपरीत, नामांकित चर के बारे में कोई धारणा नहीं बनाई जा सकती है range

इसके अलावा, विधि के वास्तविक निकाय में, किसी अन्य Rangeचर को पेश किया जाना चाहिए (चाहिए) का नाम उनके इरादे से होगा, इसलिए आपके पास हो सकता है paddedऔर unpadded... toPadउन नामकरण सम्मेलनों के अनुरूप है, लेकिन rangeबस चिपक जाता है और जेल नहीं करता है।


3
padded/ unpaddedस्थानीय अपरिवर्तनीय चर के लिए अच्छा लगता है। लेकिन अगर कोई परिवर्तनशील toPadपैरामीटर है, तो पैडिंग होने के बाद नाम toPadकिसी भी अधिक फिट नहीं होता है (जब तक कि परिणाम तुरंत वापस नहीं किया जाता है)। मैं Range rangeउन मामलों में नहीं रहूंगा।
kapex

@ Kapep मैं इसे बस फोन करूँगा result। यह संशोधित हो जाता है और वापस आ जाता है । उत्तरार्द्ध नाम और पूर्व अनुसरण से स्पष्ट है, क्योंकि एक असंबद्ध तर्क को वापस करने का कोई मतलब नहीं है।
माॅर्टिनस

हस्ताक्षर से, Padविधि एक लौट आती है Range। मेरे लिए, इसका मतलब यह है कि जिसको मैंने पास किया है, उसे संरक्षित किया जाएगा, संशोधित नहीं किया जाएगा, और एक नया, गद्देदार Rangeवापस किया जाएगा। ।
आरोन एम। एशबैक

1
मुझे यकीन नहीं है कि आपकी सलाह के बारे में क्या सोचना है। Pad(toPad)लगता है कि गलत IMHO। आप हालांकि अपनी बात का बचाव करने के लिए एक अच्छा बिंदु बनाते हैं। आप मुझसे एक +0 प्राप्त करें! :)
एरिक डुमिनील

प्रश्न में यह कहा गया है कि यह "एक नई सीमा लौटाता है जिसमें कुछ पेडिंग लगाई गई है"। मैं आपके नामकरण के लिए सहमत हूं कि आपको क्या लगता है कि परिदृश्य क्या है, लेकिन वास्तविक प्रश्न के लिए मैं कुछ सीमा तक CreateRangeWithPadding (रेंज स्रोत)
रिचर्ड विलिस

3

कोड तत्वों (प्रकार, चर, कार्य, कुछ भी) के नामकरण के लिए, अपने आप से पूछने के लिए महत्वपूर्ण प्रश्न है

यदि मैं एक टाइपो बनाता हूं, तो क्या कंपाइलर मेरे लिए ढूंढेगा?

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

आपकी स्थिति के लिए जहां प्रकार और चर केवल पूंजीकरण में भिन्न होते हैं, यह हमेशा मामला होगा। (या लगभग हमेशा - पर्याप्त प्रयास के साथ, मुझे यकीन है कि आप इसे काम कर सकते हैं, लेकिन आपको वास्तव में प्रयास करना होगा।) इसलिए मुझे लगता है कि आप वहां ठीक हैं।

जहां आपको चिंतित होने की आवश्यकता होगी यदि दो वैरिएबल, विधियाँ, कार्य या गुण हैं जिन्हें वर्तमान स्कोप में कहा जाता है rangeऔर Range। उस स्थिति में संकलक शायद इसे माध्यम से जाने देगा , और आप रन-टाइम पर अप्रत्याशित व्यवहार प्राप्त करने वाले हैं। ध्यान दें कि उन दोनों में से किसी भी प्रकार के कोड तत्व हैं, न कि केवल "दो चर" या "दो कार्य" - उन सभी को एक-दूसरे के लिए निहित किया जा सकता है, जिसके परिणामस्वरूप जब यह चलता है। आपको चेतावनी मिल सकती है, लेकिन आप इससे अधिक की गारंटी नहीं दे सकते। यदि आपके पास दो प्रकार के घोषित हैं rangeऔर आपके पास समान मुद्दे हैं Range

यह भी ध्यान दें कि हंगेरियन नोटेशन शैली पर भी वही लागू होता है , जहाँ नाम एक या अधिक वर्णों के साथ उपसर्ग किए जाते हैं, जो कुछ भी इसके बारे में कुछ और कहते हैं। यदि आपके पास एक चर कहा जाता है Rangeऔर इसे एक पॉइंटर कहा जाता है PRange, तो गलती से मिस करना आसान है P, उदाहरण के लिए। C # को इसे पकड़ना चाहिए, लेकिन C और C ++ आपको केवल एक चेतावनी देगा। या अधिक चिंताजनक रूप से, मान लीजिए कि आपके पास एक डबल संस्करण है जिसे DRangeआप डाउनस्ट्रीम कहते हैं और जिसे एक फ्लोट संस्करण कहा जाता है FRange। दुर्घटना से नाव एक (जो आसान है के बाद से कुंजी एक कुंजीपटल पर निकट हैं) और अपने कोड का उपयोग की तरह काम करते हैं, लेकिन यह अजीब और अप्रत्याशित तरीके से गिर जाएगा, जब प्रक्रिया संकल्प और underflows से बाहर चलाता है।

अब हम उन दिनों में नहीं हैं जहाँ हमारे पास 8 वर्णों की सीमाएँ हैं, या 16 वर्ण हैं, या जो भी मनमानी सीमा है। मैंने कभी-कभी नौसिखियों को लंबे चर नामों के बारे में शिकायत करते हुए सुना है जो कोडिंग को लंबा बनाते हैं। यह केवल नौसिखिए हैं जो इस बारे में शिकायत करते हैं। गंभीर कोडर्स जानते हैं कि वास्तव में जो समय लगता है वह अस्पष्ट बगों का पता लगा रहा है - और नामकरण का बुरा विकल्प अपने आप को उस विशेष छेद में गिराने का एक शानदार तरीका है।


पाठकों के लिए सिर्फ एक नोट - सी # के लिए, लोगों को वास्तव में हंगेरियन नोटेशन से बचना चाहिए । हालांकि यह पुराने समय में उपयोगी था जब वाक्य रचना हाइलाइट एक चीज़ नहीं थी या सीमित थी, आजकल यह वास्तव में मदद नहीं करता है।
टी। सर -

@ टी। एस। दिन में भी वापस, मैं इसे एक जुनून के साथ नफरत करता था! जैसा कि आप कहते हैं, बेहतर आईडीई ने उन समस्याओं को हल किया है जो इसका उद्देश्य था, लेकिन यह अभी भी हर बार प्रकट होता है। यदि ऐतिहासिक उदाहरणों के लिए, उदाहरण के लिए, आपको Windows API से बात करने की आवश्यकता है, तब भी आप इसे देखेंगे। मैं लोगों की पसंदीदा शैलियों को पूरी तरह से मारना नहीं चाहता था अगर वे वास्तव में इसे पसंद करते हैं, लेकिन मैं इसे एक हुक के रूप में उपयोग करना चाहता था कि ऊपरी / निचले मामले में एकमात्र तरीका नहीं है जिससे आप नामकरण कर सकते हैं।
ग्राहम

मुझे पता है कि आप हंगेरियन नोटेशन के उपयोग का प्रस्ताव नहीं दे रहे हैं, लेकिन मैं यह भी जानता हूं कि युवा देवों के पास शांत नामों वाली चीजों की भारी कमजोरी है। कहने के लिए सक्षम होने के नाते "मेरा कोड इस सुपर गुप्त निंजा कोडिंग शैली में लिखा गया है - हंगेरियन नोटेशन!" शायद ही कभी युवा दिमाग को शांत लग सकता है। मैंने देखा है कि बहुत से देव शांत शब्दों के प्रचार के शिकार होते हैं ... हंगेरियन नोटेशन दर्द है जो स्रोत कोड xX
T. Sar - Reinstate Monica

@ T.Sar काफी सच है। "जो अतीत को याद नहीं करते हैं वे इसे दोहराने के लिए बर्बाद होते हैं" और वह सब। : /
ग्राहम

1
क्या हम मूल हंगेरियन संकेतन के बारे में बात कर रहे हैं या यह कैसे माइक्रोसॉफ्ट द्वारा गलत तरीके से व्याख्या की गई थी (पास में "विंडोज टीम पर प्रलेखन लेखकों ने अनजाने में सिस्टम हंगेरियन के रूप में जाना जाने वाला आविष्कार किया था" और साथ ही लियो लैपॉर्टे पर ट्रायुलेशन प्रकरण पर जोएल स्पोल्स्की के साक्षात्कार में। 277, 2016-12-12, 04 मिनट 00 सेकंड - 06 मिनट 35 सेकंड )?
पीटर मोर्टेंसन

1

एक किस्सा मैं जोड़ना चाहूंगा, जबकि Range rangeयह वाक्यात्मक रूप से कानूनी है, यह चीजों को डिबग या रिफ्लेक्टर के लिए अधिक चुनौतीपूर्ण बना सकता है। उस फ़ाइल के "वैरिएबल" नाम के एक वैरिएबल की तलाश है, जिसमें टाइप रेंज के बहुत सारे वैरिएबल हों? इस नामकरण पसंद के परिणामस्वरूप आप बाद में अधिक काम करना समाप्त कर सकते हैं।

हालांकि यह काफी हद तक संदर्भ पर निर्भर है। यदि यह 30 लाइन की फ़ाइल है, तो मेरे कथन वास्तव में लागू नहीं होते हैं।


7
अधिकांश लोग ऐसे टूल का उपयोग करते हैं जो विंडोज डेवलपमेंट के लिए प्रकार और मापदंडों या चर के बीच अंतर करते हैं। आप जो वर्णन करते हैं, वह मुझे यूनिक्स पर अच्छे पुराने grep दिनों की याद दिलाता है।
फ्रैंक हिलमैन

1
@FrankHileman यह आपको आश्चर्यचकित कर सकता है, लेकिन यूनिक्स अभी भी जीवित है और grep अभी भी उपयोग में है: (D)। के रूप में grep डिफ़ॉल्ट केस-संवेदी है, उल्लेखित समस्या अभी मौजूद नहीं है। हालाँकि, यहां तक ​​कि हम, टर्मिनल-एडिक्टेड विंडो-हेटर्स, शायद ही कभी सोर्स कोड के लिए grep का उपयोग करते हैं क्योंकि IDE आम खोजों में बहुत बेहतर है।
माॅर्टिनस

मुझे लगता है कि हम सहमत हैं कि मंच बिंदु नहीं है। grepएक महान उपकरण है, लेकिन यह एक refactoring उपकरण नहीं है। और रीफैक्टरिंग टूल मेरे द्वारा उपयोग किए गए प्रत्येक विकास मंच पर मौजूद हैं। (ओएस एक्स, उबंटू, विंडोज)।
एरिक विल्सन

@ EricWilson एक समय में, grep और sed यूनिक्स पर केवल रीफैक्टरिंग उपकरण थे।
फ्रैंक हिलमैन

@FrankHileman सिर्फ इसलिए कि किसी चीज को रिफ्लेक्टरिंग टूल के रूप में उपयोग किया जाता है इसका मतलब यह नहीं है कि यह एक है। मैं नोटपैड में रिफ्लेक्टर कर सकता हूं, लेकिन यह टेक्स्ट एडिटर से ज्यादा नहीं है।
एरिक विल्सन

1

मुझे लगता है कि आप Range rangeएक कारण के लिए आजकल उपयोग कर सकते हैं : वाक्य रचना हाइलाइटिंग। आधुनिक आईडीई आमतौर पर विभिन्न रंगों में टाइप नाम और पैरामीटर नाम को उजागर करते हैं । इसके अलावा एक प्रकार और एक चर में काफी "तार्किक दूरी" होती है जो आसानी से भ्रमित नहीं होती है।

यदि ऐसा नहीं होता है तो मैं एक अलग नाम पर विचार करूंगा या एक प्लगइन / एक्सटेंशन को सक्षम करने की कोशिश करूंगा जो इस वाक्यविन्यास हाइलाइटिंग को कर सकता है।


0

जब कोई फ़ंक्शन जेनेरिक होता है, तो यह इस कारण से खड़ा होता है कि पैरामीटर जेनेरिक होंगे, और इस प्रकार जेनेरिक नाम होना चाहिए।

वह नहीं जो आप कह रहे हैं, लेकिन मैंने ऐसे कार्य देखे हैं जो एक सामान्य कार्य करते हैं जिसमें पैरामीटर नाम हैं जो भ्रामक रूप से विशिष्ट हैं। पसंद

public String removeNonDigits(String phoneNumber)

फ़ंक्शन नाम बहुत ही सामान्य लगता है, जैसे यह कई स्थितियों में कई तारों पर लागू किया जा सकता है। लेकिन पैरामीटर नाम अजीब रूप से विशिष्ट है, मुझे आश्चर्य होता है कि क्या फ़ंक्शन नाम भ्रामक है, या ... क्या?

तो यकीन है, रेंज रेंज कहने के बजाय, आप रेंज रेंजट्यूपैड कह सकते हैं। लेकिन इससे क्या जानकारी जुड़ती है? बेशक यह पैड करने की सीमा है। और क्या होगा?

कुछ मनमाना उपसर्ग, "मेरे" या "m_" या जो कुछ भी जोड़कर, पाठक को शून्य अतिरिक्त जानकारी देता है। जब मैंने ऐसी भाषाओं का उपयोग किया है जहां संकलक एक चर नाम को एक प्रकार के नाम के समान नहीं होने देता है - केस संवेदनशीलता के साथ या बिना - मैंने कभी-कभी उपसर्ग या प्रत्यय पर रखा है, बस इसे संकलित करने के लिए । लेकिन यह सिर्फ संकलक को संतुष्ट करने के लिए है। कोई यह तर्क दे सकता है कि भले ही संकलक भेद कर सकता है, इससे मानव पाठक के लिए भेद करना आसान हो जाता है। लेकिन वाह, जावा में मैंने "ग्राहक ग्राहक = नया ग्राहक ();" एक अरब बार और मैंने इसे कभी भ्रमित नहीं पाया। (मैंने हमेशा इसे थोड़ा बेमानी पाया है और मुझे पसंद है कि VB में आप केवल "मंद ग्राहक को नए ग्राहक के रूप में" कह सकते हैं और आपको कक्षा का नाम दो बार देने की आवश्यकता नहीं है।)

जहाँ मैं जेनेरिक नामों पर ज़ोर देता हूँ, जब एक ही फ़ंक्शन में एक ही प्रकार के दो या अधिक उदाहरण हैं। ESPECIALLY पैरामीटर। पसंद:

public Range pad(Range range1, Range range2)

रेंज 1 और रेंज 2 के बीच क्या अंतर है? मुझे कैसे पता होगा? अगर यह कुछ ऐसा है जहां वे वास्तव में दो सामान्य और विनिमेय मूल्य हैं, ठीक है, जैसे

public boolean overlap(Range range1, Range range2)

मुझे उम्मीद है कि अगर सीमाएँ ओवरलैप और झूठी हैं, तो वे सही नहीं लौटेंगे, इसलिए वे सामान्य और विनिमेय हैं।

लेकिन अगर वे अलग हैं, तो मुझे एक सुराग दें कि वे कैसे अलग हैं! मैं अभी हाल ही में एक कार्यक्रम पर काम कर रहा था जिसमें भौगोलिक स्थानों के बारे में डेटा रखने के लिए "प्लेस" वर्ग था, और इस प्रकार के चर के साथ "पी", "प्लेस", "प्लेस 2", "मायप्लस", आदि वाह, उन। नाम वास्तव में मुझे यह निर्धारित करने में मदद करते हैं कि कौन सा है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.