2009-01-21 23 views
34

सभी हरे रंग की पाने की कोशिश करते समय, मुझे रिशेर्पर द्वारा निम्नलिखित सुझाव मिल गया।Resharper बनाने कोड कोड कोड कम पढ़ने योग्य द्वारा कोड सुझाव?

मूल कोड:

static public string ToNonNullString(this XmlAttribute attr) 
    { 
     if (attr != null) 
      return attr.Value; 
     else 
      return string.Empty; 
    } 

सुझाव: निम्नलिखित में जिसके परिणामस्वरूप को दूर अनावश्यक 'शेष':

static public string ToNonNullString(this XmlAttribute attr) 
    { 
     if (attr != null) 
      return attr.Value; 
     return string.Empty; 
    } 
मेरे लिए

, सुझाव संस्करण मूल की तुलना में कम पठनीय लगता है। क्या रिशेर्पर सुझाव अच्छा रखरखाव कोड की परिभाषा को प्रतिबिंबित करता है?

+5

* सभी हरे रंग की पाने की कोशिश करते समय * <- आप इसे गलत कर रहे हैं। – jwg

+1

सी # 6.0 विविधता: 'वापसी एआरआर?। वैल्यू ?? स्ट्रिंग। लक्षण; एक संकेत के निरीक्षण को डाउनग्रेड करने का सुझाव देने के लिए ' – Brian

उत्तर

49

तकनीकी रूप से रिशेर्पर सही है कि "अन्य" अनावश्यक है, मैं पूर्व संस्करण पसंद करता हूं हालांकि इरादा अधिक स्पष्ट है।

कहा करने के बाद कि, मैं नहीं बल्कि साथ जाना चाहते हैं:

return attr != null ? attr.Value : string.Empty; 
+24

पठनीयता के लिए टर्नरी ऑपरेटरों एह? * महत्वपूर्ण vulcan भौं उठाओ * –

+33

+1, हाँ मुझे यह और अधिक पठनीय लगता है - क्यों लोग सशर्त ऑपरेटर से डरते हैं? –

+9

क्योंकि मुझे ऑपरेटर प्रतीकों के लिए शिकार करना है कि विभिन्न हिस्सों क्या हैं। –

10

मैं मानता हूं कि आपके कोड का पहला संस्करण अधिक पठनीय है।

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

+2

+1। मुझे लगता है कि इस मामले में एक गार्ड क्लॉज बेहतर है, लेकिन कभी-कभी मैं समरूपता के लिए अकेले 'अन्य' को छोड़ना पसंद करता हूं। –

31

आह, कोड सौंदर्यशास्त्र। पवित्र युद्ध का समय (बतख)

मैं किसी के साथ जाना चाहते हैं एक: अभिव्यक्ति:

return attr != null ? attr.Value : String.Empty 

या यदि उलटने और लाइन ब्रेक को दूर एक guard clause निर्माण करने के लिए:

if (attr == null) return String.Empty; 

return attr.Value; 
+6

हां, यह वास्तव में गार्ड क्लॉज के लिए अच्छा है। –

4

आपका मूल कोड बहुत अधिक पठनीय और समझा जा सकता है - एक नज़र में, आप वास्तव में ऐसी स्थिति देख सकते हैं जो string.Empty लौटाए जाने का कारण बनता है। else के बिना, आपको यह देखना होगा कि इससे पहले if ब्लॉक में कोई वापसी है।

बस याद रखें, आप मशीन से इंसान और स्वाभाविक रूप से स्मार्ट हैं। अगर यह आपको कुछ बेहतर बताता है और आप सहमत नहीं हैं, तो इसे सुनें नहीं।

1

मैंने रीशेर्पर के बारे में भी यही बात देखी है, इसलिए मैं कुछ वस्तुओं को बंद करने या उनके चेतावनी स्तर को डाउनग्रेड करने की क्षमता की सराहना करता हूं। मैं भी इस सुझाव से परेशान हूं:

SomeClass varName = new SomeClass();

करने के लिए एक सुझाव दिया बदल गया है: = नए SomeClass

वर VARNAME();

हाँ, मुझे पता है कि मुझे नहीं पता प्रारंभिक घोषणा प्रकार की जरूरत है, लेकिन यह पता चलता है कि वर प्रपत्र किसी भी तरह है बेहतर अन्य की तुलना में अजीब लगता है। क्या कोई सुझाव के पीछे तर्क से परिचित है या आप मुझसे सहमत हैं कि यह भी अजीब है?

+0

मैं भी ऐसा करता हूं, यही कारण है कि मैं एकमात्र चीज बदलता हूं जब मैं resharper इंस्टॉल करता हूं। मैं इसे हमेशा स्पष्ट प्रकारों का उपयोग करता हूं। – Orentet

+1

यह बेहतर है क्योंकि 'SomeReallyVerboselNamedClassWithAVeryLongName कुछ वास्तव में VerboselyNameClass = नया कुछ वास्तव में VerboselyNamedClassWithAVeryLongName(); '' var' समकक्ष की तुलना में लंबा और कम साफ है, लेकिन इसमें कोई और जानकारी नहीं है जो आपको इसे पढ़ने में मदद करती है। – jwg

1

अपवादों का क्लासिक उदाहरण जो आप छोटे नमूना आकार का उपयोग करते समय सब कुछ में रेंगते हैं। यदि एक गार्ड क्लॉज लेआउट में अवरुद्ध हो तो एक विशाल अगर रिफैक्टरिंग कोड को और अधिक पठनीय बनाता है, लेकिन जैसा कि आप कहते हैं, यदि आप एक ही नियम को एक ही लागू करते हैं- अन्यथा यह सहायक नहीं है। मैं अब तक कहूंगा कि यह एक छोटी (थोड़ी) दूरदर्शिता देवताओं द्वारा दूरदर्शिता की कमी थी, जैसे कि इस तरह के बहुत छोटे ब्लॉक को छोड़ना नहीं, लेकिन यह काफी हानिकारक है।

21

मुझे लगता है कि अगर आप को उलटने के नए संस्करण में काफी बेहतर है अगर

static public string ToNonNullString(this XmlAttribute attr) 
{ 
    if (attr == null) 
     return string.Empty; 

    return attr.Value; 
} 

क्योंकि आपके मूल संस्करण, भी सममित है, जबकि अशक्त-मामला एक विशेष मामला है।

नया संस्करण "अधिकतर समय में क्या लौटाता है" की शर्तों में अधिक पठनीय है?

0

मेरे कुछ सहयोगियों ने उस पल से रिजर्पर का उपयोग करना शुरू किया जो उन्होंने संपादित किए गए पृष्ठों पर लेआउट और पठनीयता में भयानक थे। मुझे यह कहते हुए खुशी हो रही है कि यह जीवित नहीं रहा है, यहां कोई भी इसका उपयोग नहीं कर रहा है।

हाथ में बयान के बारे में मैं जेफरी हंटिन से सहमत हूं, इनलाइन-अगर इस तरह के बयान के लिए बहुत अच्छा है और व्हाट्सैट का समाधान अत्यधिक अनुकूल है। कुछ अपवादों के साथ मैं (व्यक्तित्व) कहता हूं कि विधियों/कार्यों में केवल 1 रिटर्न स्टेटमेंट होना चाहिए।

यदि आप (लगभग) हमेशा अपने अगर के साथ अन्यथा लागू करते हैं (भले ही यह कुछ और नहीं है लेकिन एक टिप्पणी-रेखा बताती है कि आप अन्य कथन के साथ कुछ भी नहीं करते हैं) यह आपको उस स्थिति के बारे में सोचने के लिए मजबूर करता है, अक्सर यह गलतियों को रोक नहीं सकता है।

दोनों टिप्पणियों को नियम के समान 'सोचने' के रूप में उपयोग नहीं किया जाना चाहिए, इस तरह के अधिकांश मुद्दों की तरह, हमेशा अपने मस्तिष्क का उपयोग करें :) अधिकांश त्रुटियां तब होती हैं जब आप नहीं करते हैं।

निष्कर्ष में: Resharper को नहीं कहें! (हाँ, मैं वास्तव में रेस्फरर को नापसंद करता हूं, क्षमा करें।)

+1

तो अन्य सभी सुविधाओं के बारे में क्या कोड संकेतों और सुझावों के अलावा ReSharper का? वे मेरे जीवन को आसान बनाते हैं। इसके अलावा, आप कर सकते हैं ReSharper को केवल उन नियमों को दिखाने के लिए कॉन्फ़िगर करें जिन्हें आप किसी भी तरह से सहमत हैं। – Sekhat

+0

डिफॉल्ट रूप से Resharper बहुत सारे बेवकूफ सुझावों को ध्यान में रखता है जो वास्तव में मायने रखता है और अक्सर निम्न गुणवत्ता वाले कोड की ओर जाता है। लेकिन जैसा कि अन्य ने कहा था कि इन सुविधाओं को अक्षम किया जा सकता है, या संपादित किया जा सकता है यदि आपके पास बहुत समय है। – derloopkat

1

सी # में नोब होने के नाते और सी और जावा के लिए अधिक उपयोग किया जाने वाला मैं अभी भी सी # .NET और VS में कोण ब्रैकेट के प्लेसमेंट में उपयोग नहीं कर सकता। उन सभी को एक तरफ रखकर, मैं एंड्री के साथ सहमत हूं कि 'अगर' को और भी पठनीय करना है। दूसरी ओर मैं व्यक्तिगत रूप से पाते हैं कि 'else' को छोड़कर पठनीयता कम हो जाती है (थोड़ा)। मैं इस व्यक्तिगत रूप से साथ जाना होगा:

static public string ToNonNullString(this XmlAttribute attr) 
{  
    if (attr == null) 
     return string.Empty; 
    else 
     return attr.Value; 
} 
8

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

बेशक आपको कुछ कोड को अपनी कोडिंग शैली के कुछ हिस्से को निर्देशित नहीं करना चाहिए, और रीशेर्पर ऐसा नहीं कर रहा है अगर आप इसे नहीं बताते हैं। यह इत्ना आसान है।

+3

लेकिन मेरे कोड में // टिप्पणियां // ReSharper अक्षम असंगत नामकरण आदि को पढ़ने से पठनीयता प्रभावित होगी –

1

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

return testDateTime > BaseDateTime ? item.TransactionDate <= testDateTime && item.TransactionDate >= BaseDateTime : item.TransactionDate >= testDateTime && item.TransactionDate <= BaseDateTime; 

if (testDateTime > BaseDateTime) 
    return item.TransactionDate <= testDateTime && item.TransactionDate >= BaseDateTime; 

return item.TransactionDate >= testDateTime && item.TransactionDate <= BaseDateTime; 

की तरह कुछ बदल कुछ में नहीं वास्तव में मेरे लिए उपयोगी प्रतीत होता है।

3

मेरे कोडिंग मानक हमेशा उपयोग कोष्ठक है (केवल एक अनुदेश है, भले ही आदेश के बाद अगर)
यह एक बिट प्रयास (अधिक लिख रहा है) की आवश्यकता है, लेकिन मैं इतनी बार आश्वस्त हो जाते हैं कि यह यह बहुत लायक है!

सबसे आम बग (और विडंबना यह मुश्किल लगता है) में से एक के बाद अतिरिक्त अनुदेश जोड़ रहा है अगर बयान और भूल जोड़ने कोष्ठक ...

तो मुझे पसंद है Resharper क्या प्रस्ताव रखा। खासकर जब नेस्ट होने अगर-कथन:

मान लें कि हम इस कोड है:

if (condition1) { 
     instruction1; 
    } 
    else { 
     if (condition2) { 
      instruction2; 
     } 
    } 

यह बदला जा सकता है इस तरह देखने के लिए:

if (condition1) { 
     instruction1; 
    }  
    else if (condition2) { 
     instruction2; 
    }  

और यह तो मेरे पास बहुत अधिक पठनीय है पहले।
हमेशा बहस का मुद्दा (यह भी अधिक दिखाई होगा यदि आप 2-स्तर की तुलना में अधिक नेस्टेड बयान है जब)

1

इसकी जब यह सर्वोत्तम प्रथाओं और कोडिंग मानकों की बात आती है। इसका एक कारण यह है कि उन्हें विजुअल स्टूडियो जैसे आईडीई का उपयोग करके बहुत आसानी से लागू नहीं किया जा सकता है। FxCop और StyleCop जैसे टूल उपलब्ध हैं जिनका उपयोग मानकों के लिए कोड का विश्लेषण करने के लिए किया जा सकता है। FxCop संकलित कोड विश्लेषण के लिए प्रयोग किया जाता है और StyleCop का उपयोग स्रोत कोड विश्लेषण के लिए किया जाता है।

आप स्टाइलकॉप को एक मिनट के स्तर पर कॉन्फ़िगर कर सकते हैं कि आप किस प्रारूप को कोड पर लागू करना चाहते हैं। Resharper के लिए स्टाइलकॉप नामक एक ऐड-इन है जो विजुअल स्टूडियो के अंदर सुझाव देता है। मेरे पास http://nileshgule.blogspot.com/2010/10/refactoring-clean-code-using-resharper.html

1

रिशेर्पर संस्करण बेहतर है क्योंकि 'attr! = Null' स्थिति को प्रारंभिक बकाया (या उपयोग-केस अपवाद पथ) के रूप में देखा जा सकता है, जिससे फ़ंक्शन को अनुमति मिलती है। अपने मुख्य कार्य के साथ जारी रखें। (न तो मुझसे उच्च फाइव जीतते हैं, मुझे कई रिटर्न से नफरत है)।

इस मामले में मैं कहूंगा कि श्री विगल्स एकल-लाइनर सबसे अच्छा विकल्प है।