2010-05-27 16 views
38

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

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

नीचे है कि मैं के साथ

कोई स्वरूपण (समान अपेक्षाकृत गैर जटिल क्वेरी के लिए)

var allInventory = system.InventorySources.Select(src => new { Inventory = src.Value.GetInventory(product.OriginalProductId, true), Region = src.Value.Region }).GroupBy(i => i.Region, i => i.Inventory); 

ऊंचा प्रारूपण

आए हैं स्वरूपण में मतभेद के कुछ उदाहरण हैं
var allInventory = system.InventorySources 
    .Select(src => 
     new { 
      Inventory = src.Value.GetInventory(product.OriginalProductId, true), 
      Region = src.Value.Region }) 
       .GroupBy(
        i => i.Region, 
        i => i.Inventory); 

ब्लॉक स्वरूपण

var allInventory = system.InventorySources 
    .Select(
     src => new 
     { 
      Inventory = src.Value.GetInventory(product.OriginalProductId, true), 
      Region = src.Value.Region 
     }) 
     .GroupBy(
      i => i.Region, 
      i => i.Inventory 
     ); 

सूची

var allInventory = system.InventorySources 
    .Select(src => new { Inventory = src.Value.GetInventory(product.OriginalProductId, true), Region = src.Value.Region }) 
    .GroupBy(i => i.Region, i => i.Inventory); 

का प्रारूपण मैं इतना है कि यह पठनीयता & समझ अधिकतम और स्वच्छ और पेशेवर लग रहा है LINQ स्वरूपण के लिए एक मानक के साथ आने के लिए चाहते हैं। अब तक मैं फैसला नहीं कर सकता इसलिए मैं यहां पेशेवरों को प्रश्न बदल देता हूं।

+0

रीशेपर और कोडरश पर एक नज़र डालें। वे दोनों LINQ कथन और क्वेरी समझ के लिए स्वत: स्वरूपण प्रदान करते हैं। मैंने पाया है कि वे एक पठनीय, समझदार प्रारूप बनाने में एक अच्छा काम करते हैं। – LBushkin

+4

मैं resharper का उपयोग करता हूं, यह पूरी तरह से विचित्र इंडेंटेशन जोड़कर linq स्वरूपण में बिल्कुल असंगत है। – Aren

+1

आप linq सिंटैक्स शजर का उपयोग क्यों नहीं कर रहे हैं: (सिस्टम में src से। इन्वेंटरी स्रोत समूह iRegion, i.Inventory नया {इन्वेंटरी = src.Value.GetInventory (product.OriginalProductID, true), क्षेत्र = src.Value.Region का चयन करें }); ? – TcKs

उत्तर

9

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

+0

हाँ, यह ब्लॉक प्रारूपण, 'बर्बाद अंतरिक्ष' कारक पर विचार करते समय मेरा पहला विचार था, लेकिन यह वास्तव में पठनीयता में वृद्धि करता है। – Aren

0

इसका बहुत ही व्यक्तिपरक है।

मैं ब्लॉक स्वरूपण विधि का उपयोग करता हूं।

मैं स्टाइलकॉप के खिलाफ कोड भी जांचता हूं और यह सुनिश्चित करता हूं कि यह कोई स्टाइलकॉप चेतावनी नहीं देता है।

+0

मुझे पता है कि यह भाग में व्यक्तिपरक है, लेकिन यही कारण है कि मैं उम्मीद कर रहा था कि लोग प्रारूपों के पीछे तर्क प्रदान करेंगे। – Aren

3

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

यदि मेरे पास एक जटिल या बड़ा लिनक कथन है तो मैं ब्लॉक स्वरूपण के साथ जाता हूं ताकि यह अन्य लोगों को पढ़ने और अनुसरण करने का प्रयास कर सके जो मैं करने की कोशिश कर रहा था।

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

16

मेरे प्रारूपण:

var allInventory = system.InventorySources 
    .Select(src => new 
    { 
    Inventory = src.Value.GetInventory(product.OriginalProductId, true), 
    Region = src.Value.Region 
    }) 
    .GroupBy(
    i => i.Region, 
    i => i.Inventory 
); 

नोट्स:

  • उद्घाटन तरीकों पर कोष्ठक एक नई लाइन के योग्य नहीं हैं।
  • समापन माता-पिता उस लाइन के इंडेंटिंग से मेल खाते हैं जिसमें शुरुआती माता-पिता शामिल हैं।
  • src => नया चयन के समान लाइन पर रहता है, क्योंकि यह सिर्फ एक नई लाइन के योग्य नहीं है।
  • अज्ञात प्रकार हमेशा ब्लॉक उपचार प्राप्त करता है, जैसे कि यह किसी क्वेरी के बाहर उपयोग किया जाता था (लेकिन समापन माता-पिता एक नई रेखा के योग्य नहीं है)।
  • दो पैरामीटर GroupBy अधिभार को आम तौर पर नहीं कहा जाता है। यद्यपि यह एक पंक्ति पर आसानी से फिट हो सकता है, यह स्पष्ट करने के लिए एक अतिरिक्त रेखा का उपयोग करें कि कुछ असामान्य हो रहा है।
+2

+1 यह मैं स्वाभाविक रूप से करता हूं, और इसी कारण से। – jsmith

+0

बस मेरी तरह। लेकिन 'system.InventorySources लिखने के बारे में क्या है। चुनें (src => src.Value.Region)' क्या आप इसे एक पंक्ति में लिखेंगे या इसे अपने इंडेंटेशन स्टैंडएट को तोड़ने के लिए कई लाइनों में विभाजित करेंगे? यही बात है कि मैं कई बार उलझन में हूं :) मुझे पता है कि यह एक छोटी सी चीज है लेकिन अभी भी ... – sotn

+0

यदि एक लैम्ब्डा के साथ केवल एक विधि कॉल है और यह वांछित लाइन लंबाई से अधिक नहीं है, तो मैं इसे छोड़ दूंगा एक लाइन –

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