2009-11-03 25 views
7

हम आम तौर पर सभी सी # वाक्यविन्यास के लिए कोडिंग/नामकरण मानक का पालन करते हैं। उदाहरण के लिए, यदि हम विधि के अंदर स्ट्रिंग घोषित करते हैं, तो हम स्कोप-डेटाटाइप-फ़ील्डनाम प्रारूप का उपयोग करते हैं। (lstrPersonName)LINQ नामकरण मानक - लैम्ब्डा अभिव्यक्ति

List<Person> icolPerson; 
private LoadPersonName() 
{ 
    string lstrPersonaName; 
} 

मैं सोच रहा हूं कि हम लैम्ब्डा अभिव्यक्ति में नामकरण मानक का पालन कैसे करते हैं। विशेष रूप से जब हमने func प्रतिनिधि के लिए तर्कों को परिभाषित किया है, तो हम x जैसे छोटे नामों का उपयोग करते हैं। उदाहरण के लिए

var lobjPerson = icolPerson.Where(x => x.person_id = 100) 

यदि आप उपर्युक्त रेखा को देखते हैं, तो एक्स किसी भी मानक का पालन नहीं करता है। मैंने यह भी पढ़ा कि लैम्ब्डा अभिव्यक्ति का एक उद्देश्य लेंस कोड को कम करना है।

मैं मानक नामकरण के लिए सही दृष्टिकोण प्राप्त करने में सहायता लेने के लिए यहां हूं।

var lobjPerson = icolPerson.Where(x => x.person_id = 100) 

या

var lobjPerson = icolPerson.Where(lobjPerson => lobjPerson .person_id = 100) 

उत्तर

7

मैंने वीबीस्क्रिप्ट (एएसपी) में बहुत सारे प्रोग्रामिंग किए हैं, और वहां डेटा प्रकार का ट्रैक रखने के लिए हंगेरी नोटेशन का उपयोग सैने रखने के लिए महत्वपूर्ण था। एक प्रकार की सुरक्षित भाषा जैसे सी # मुझे उस तरह से हंगेरी नोटेशन का उपयोग करने के लिए कोई उपयोग नहीं मिलता है।

वर्णनात्मक परिवर्तनीय नाम कोड की पठनीयता के लिए बहुत अधिक करते हैं, लेकिन इसे हमेशा एक चर के प्रत्येक पहलू का वर्णन नहीं करना पड़ता है। persons जैसे नाम इंगित करते हैं कि यह व्यक्ति वस्तुओं का संग्रह है, चाहे वह List<Person> या IEnumerable<Person> आमतौर पर यह समझना महत्वपूर्ण नहीं है कि कोड क्या कर रहा है, और संकलक तुरंत आपको बताता है कि क्या आप कुछ पूरी तरह से गलत करने की कोशिश कर रहे हैं।

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

1

कोई बिल्कुल सही दृष्टिकोण नहीं है। किसी अन्य कोडिंग मानकों की तरह नामकरण मानक (जैसे अभिव्यक्तियों के बाद/पहले पंक्तियों और नई लाइनें) समूह के अंदर एक सम्मेलन है। तो बस अपनी पसंद के अनुसार अपना कोड लिखें और जैसा कि आपको अपनी कंपनी में करना चाहिए। लेकिन लगातार यह करो!

मैं निजी क्षेत्रों के नामों में अंडरस्कोर उपसर्ग का उपयोग करना पसंद करता हूं। लेकिन आपकी शैली (दृश्यता + प्रकार + नाम) मुझे पुराने WINAPI कोड उद्धरण (हंगेरियन नोटेशन) =) की तरह दिखता है। अगर यह कहते हैं कि था

var lobjPerson = icolPerson.Where(p => p.person_id = 100); 

एक और उदाहरण प्रकार Car मुझे क्या करना होगा:

3

मैं आम तौर पर सिर्फ प्रकार मैं अपने मामले में तो क्वेरी करने कर रहा हूँ के पहले अक्षर के बाद से यह प्रकार व्यक्ति की है का उपयोग मैं करना होगा:

var lobjCar = icolCar.Where(c => c.car_id = 100); 

मैं वेग के लिए ऐसा करते हैं, फिर भी, मुझे नहीं लगता कि कुछ भी गलत यानी car => car.car_id

0

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

आपको हर समय x का उपयोग करने की आवश्यकता नहीं है। किसी व्यक्ति ऑब्जेक्ट के लिए, मैं इसके बजाय p का उपयोग करना चाहता हूं।

यदि आपको ब्रेसिज़ और अर्धविराम से जुड़ी एक और जटिल अभिव्यक्ति लिखनी है, तो मैं कहूंगा कि सभी सामान्य नामकरण नियम लागू होते हैं।

2

मुझे लगता है कि आपके द्वारा उपयोग किए जाने वाले नामकरण मानक (हंगेरियन नोटेशन) उस समय की आवश्यकता थी जब विजुअल स्टूडियो जैसे उच्च प्रोफ़ाइल टूल मौजूद नहीं थे। आज आपके पास इंटेलिसेंस जैसी तकनीकें हैं जो आपको टाइप करते समय वैरिएबल के साथ गलत काम कर रही हैं, जैसे स्ट्रिंग को int निर्दिष्ट करना। इसलिए, आज के रूप में, यह अच्छा कोडिंग सम्मेलनों या मानकों का एक विशेष हिस्सा नहीं है जैसा कि यह होता था। ज्यादातर लोग इन दिनों पास्कल आवरण या ऊंट आवरण का पालन करते हैं। अगर कोई इसका इस्तेमाल करता है, तो मुझे लगता है कि यह व्यक्तिगत वरीयता के कारण अधिक है।

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

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

10

मेरे lambdas एक पत्र तर्क है, आमतौर पर क्या पैरामीटर नाम होगा के पहले अक्षर का उपयोग करें:

  • buttons.Select(b => b.Text);

  • services.Select(s => s.Type);

लेकिन कभी कभी मैं जोड़ने चीजों को स्पष्ट करने के लिए कुछ और अक्षर, या दो पैरामीटर के बीच असंबद्ध करने के लिए।

और जब वहाँ ज्यादा अर्थ चीजें मैं x रों का उपयोग करें और y रों से जुड़ी नहीं है:

  • values.Aggregate((x, y) => x + y);

सभी ने कहा, मानक मैं lambdas के लिए उपयोग पहले तकलीफ है, बाद में अभिव्यक्ति, क्योंकि संदर्भ चीजों को समझने में मदद करता है (पहले उदाहरण में यह स्पष्ट है कि b एक बटन के लिए खड़ा है)।

0

यदि आपके संग्रह को कुछ- persons कहा जाता है, तो यह स्पष्ट है कि जब आप persons.Where(p => p.Whatever) कर रहे हैं तो p एक व्यक्ति है। यदि आपके लैम्ब्डा इतने जटिल हैं कि यह तुरंत स्पष्ट नहीं है कि आप जो पैरामीटर उपयोग कर रहे हैं, वे हैं, तो आपको लैम्ब्स का उपयोग नहीं करना चाहिए, या उन्हें काफी सरल बनाना चाहिए।

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

बस अपने पहचानकर्ता उचित रूप से वर्णन करते हैं कि का अर्थ है वैरिएबल है, तो शेष स्पष्ट होगा।

0

LINQ केवल उन डेवलपर्स के लिए नहीं है जो डेटाबेस के लिए प्रश्न लिखते थे लेकिन कार्यात्मक प्रोग्रामर के लिए भी।

इसलिए चिंता न करें अगर आप SQL प्रकार के प्रश्नों के साथ बहुत सहज नहीं हैं, तो हमारे पास "लैम्ब्डा अभिव्यक्ति" नामक एक बहुत अच्छा विकल्प है।

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

यहाँ हम

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Query; 
using System.Xml.XLinq; 
using System.Data.DLinq; 

namespace LINQConsoleApplication1 
{ 

class Program 
{ 
    static void Main(string[] args) 
    { 
     int[] arrInt = {1,2,3,4,5,6,7,8,9,10}; 

     #region Place to change 

     //Language Integrated Query 

     var aa = from s in arrInt 

       where s % 2 == 0 
       select s; 

     #endregion 

     foreach (var item in aa) 
     { 
      Console.WriteLine("{0}", item); 
     } 

     Console.ReadKey(); 

    } 

} 

} 

जाना आप भाषा के लिए क्वेरी का अलग दृष्टिकोण का उपयोग नहीं करना चाहते हैं तो आपको लैम्ब्डा अभिव्यक्ति का उपयोग करने के लिए स्वतंत्र हैं।

तो बस #region क्षेत्र को निम्न कोड ब्लॉक परिणामों के साथ बदलें, समान होगा।

 #region Place to change 

     //Lambda Expression 

     var aa = arrInt.Where(s => s % 2 == 0); 

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