2013-06-04 35 views
5

मुझे सही नामों वाले चर पसंद हैं लेकिन कुछ मामलों में यह करना बहुत मुश्किल है।एक ही नाम के साथ एक ही नाम के साथ एकाधिक चर

तो अगर मेरे वस्तु को लागू करता है IDisposable तो मैं उपयोग कर सकते हैं:

using (var whatever = new Whatever()) { //... } 

लेकिन यह दुर्लभ मामला है, तो मैं एक और तरीका है इसे संभाल करने के लिए मिला - (यकीन नहीं है कि यह कैसे सही ढंग से कहा जाता है) गुमनाम ब्लॉक:

//... 
{ 
    var whatever = new Whatever(); 
    //... 
} 
//... 
if (condition) 
{ 
    var whatever = new Whatever(); 
} 

क्या यह एक अच्छा दृष्टिकोण है? क्या कोई नुकसान या व्यापक धारणा है कि यह कोड पठनीयता को कम कर देता है?

+2

हालांकि मैं सवाल है, कारण है कि यह क्या है बल्कि यह क्या से घोषित किया गया था की तुलना में, के लिए इस्तेमाल किया जा रहा है के बाद चर नाम नहीं पढ़ लिया है ? –

+2

आप 'जो कुछ भी' ओवरराइट नहीं कर सकते? 'var जो भी = नया(); ... जो भी = नया(); ... ' – SimpleVar

+4

आम तौर पर मैं विधि को विभिन्न तरीकों से विभाजित करता हूं ... कम से कम कई मामलों में। –

उत्तर

3

असल में, यदि संकलक शिकायत नहीं करता है और आपका कोड पठनीय और समझने में आसान है, तो इसमें कुछ भी गलत नहीं है।

उदाहरण के लिए:

foreach (var foo in foos) 
{ 
    var task1 = new FooTask(foo); 
    task1.Run(); 
} 
foreach (var bar in bars) 
{ 
    var task2 = new BarTask(bar); 
    task2.Run(); 
} 
+1

'var task = foo? नया फूटास्क(): नया बारटास्क(); कार्य। रुन(); 'इस मामले में, मेरे लिए सबसे अधिक पठनीय लगता है। लेकिन यह संभव नहीं है अगर वे दोनों 'IRunnableTask' इंटरफेस, या कुछ समान लागू नहीं करते हैं। – SimpleVar

+1

@YoryeNathan हाँ, मैं मानता हूं, मैं बस ऐसे मामले के साथ आने की कोशिश कर रहा था जो ओपी के सवाल को फिट करे। मैंने अपना उत्तर 'foreach' ब्लॉक के साथ अपडेट किया है जो बिंदु को थोड़ा बेहतर दिखाता है। –

+0

मैंने कभी भी समेकित चर नामों का उपयोग नहीं किया क्योंकि मेरा मानना ​​है कि यह रूपांतरण नामकरण में भी बुरा अभ्यास है। तो उस मामले में बेहतर नाम दिए जाएंगे जो परिवर्तनीय उपयोग उद्देश्य को बेहतर तरीके से खोजेंगे। लेकिन मेरे मामले में चर अजीब और बहुत लंबे – Vladimirs

1

से मैं सिर्फ VSCodeAnalysis और आर # और StyleCop श्वास के साथ क्योंकि सामान्य रूप से अपने कोड का परीक्षण किया,

foreach (var foo in foos) 
{ 
    var task = new FooTask(foo); 
    task.Run(); 
} 
foreach (var bar in bars) 
{ 
    var task = new BarTask(bar); 
    task.Run(); 
} 

यह वास्तव में (मेरी राय में) है थोड़ा पढ़ने में आसान मेरी गर्दन के नीचे मुझे बहुत सारी चेतावनियों की उम्मीद होगी। लेकिन नहीं। वे सभी चुप रहते हैं। तो यह किसी भी माइक्रोसॉफ्ट कोडिंग दिशानिर्देश के खिलाफ प्रतीत नहीं होता है।

हालांकि: यदि आपको परिवर्तनीय नामों के कारण कंपाइलर त्रुटियों से बचने के लिए केवल अधूरा अज्ञात ब्लॉक बनाने की आवश्यकता है, तो यह अब आसान और सरल नहीं है। असल में, आप कंपाइलर से छुपा रहे हैं और छिपाने से समस्याएं कभी हल नहीं होंगी। मेरे दृष्टिकोण से, यदि आप प्रत्येक चर के लिए सटीक नाम चुनते हैं तो यह बेहतर कोड होगा (टाइप के लिए इसे नाम देना बिल्कुल ठीक नहीं है) और अनाम ब्लॉक को हटा दें।

केआईएसएस सिद्धांत के बाद: "इसे सरल, बेवकूफ रखें"।

1

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

नियम जो सी # यह सुनिश्चित करने में मदद करता है कि आपके तरीके असंगत नामों का उपयोग नहीं करते हैं, जटिल हैं। आप उनके बारे में अधिक जानने में रुचि रखते हैं, देखें:

http://blogs.msdn.com/b/ericlippert/archive/tags/simple+names/

संबंधित मुद्दे