2008-08-19 10 views
24

Resharper निश्चित रूप से इतना सोचता है, और बॉक्स यह नाग होगा से बाहर आपक्या मुझे * हमेशा * सी # 3.0 में स्थानीय रूप से टाइप किए गए स्थानीय चर का पक्ष लेना चाहिए?

Dooberry dooberry = new Dooberry(); 

var dooberry = new Dooberry(); 

है कि है वास्तव में सबसे अच्छा शैली माना कन्वर्ट करने के लिए?

+1

mmmmm ... dooberries .. स्वादिष्ट! –

उत्तर

35

यह निश्चित रूप से शैली का मामला है, लेकिन मैं डारे से सहमत हूं: C# 3.0 Implicit Type Declarations: To var or not to var?। मुझे लगता है कि एक स्पष्ट प्रकार के बजाय var का उपयोग करके आपके कोड को कम पठनीय बनाता है। निम्नलिखित कोड में:

var result = GetUserID(); 

परिणाम क्या है? एक int, एक स्ट्रिंग, एक GUID? हां, यह मायने रखता है, और नहीं, मुझे पता करने के लिए कोड को खोदना नहीं चाहिए। यह कोड नमूने में विशेष रूप से परेशान है।

जेफ ने he favors var कहकर इस पर एक पोस्ट लिखा था। लेकिन वह लड़का पागल है!

मैं स्टैक ओवरफ्लो सफलता के लिए एक पैटर्न देख रहा हूं: पुराने कोडिंग खोदना पोस्ट करें और (खतरनाक शैली) उन्हें एक प्रश्न के संदर्भ में वाक्यांश दें।

+8

var के बारे में शिकायत करने के बजाय चर के नाम को ठीक क्यों नहीं करें? var userID = GetUserID(); यदि उपयोगकर्ता आईडी स्ट्रिंग या int है तो यह वास्तव में बहुत महत्वपूर्ण नहीं है, यह ऐसा कुछ है जो उपयोगकर्ता की पहचान करता है और प्रासंगिक कार्यों द्वारा स्वीकार किया जाना चाहिए। –

+1

क्योंकि एक पहचान कई चीजें, int, स्ट्रिंग, guid, वस्तु, आदि हो सकता है ... –

2

मुझे लगता है कि यह स्टैक ओवरफ़्लो पर समय के साथ पूछे जाने वाले सबसे लोकप्रिय प्रश्नों में से एक होगा। यह वरीयता के लिए उबाल जाता है। जो कुछ भी आपको लगता है वह अधिक पठनीय है। जब मैं सही तरफ टाइप किया गया है तो मैं var पसंद करता हूं क्योंकि यह अधिक terse है। जब मैं एक विधि कॉल से एक चर निर्दिष्ट कर रहा हूं, तो मैं स्पष्ट प्रकार की घोषणा का उपयोग करता हूं।

0

"सर्वश्रेष्ठ शैली" व्यक्तिपरक है और संदर्भ के आधार पर भिन्न होती है।

कभी-कभी कुछ बड़े पैमाने पर लंबे नाम के नाम को टाइप करने के बजाय 'var' का उपयोग करना आसान होता है, या यदि आप किसी दिए गए फ़ंक्शन के रिटर्न प्रकार से अनिश्चित हैं। मुझे लगता है कि मैं लिंक के साथ या लूप घोषणाओं के बारे में बात करते समय 'var' का उपयोग करता हूं।

अन्य बार, पूर्ण वर्ग नाम का उपयोग करना अधिक सहायक होता है क्योंकि यह 'var' से बेहतर कोड दस्तावेज करता है।

मुझे लगता है कि यह निर्णय लेने के लिए डेवलपर पर निर्भर है। कोई रजत बुलेट नहीं है। नहीं "एक सही तरीका"।

चीयर्स!

0

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

किसी भी एक पंक्ति के बयान जहां एक प्रकार का नाम दोनों एक चर और इसके मूल्य निश्चित रूप से वर का उपयोग करना चाहिए के लिए निर्दिष्ट किया जा सकता है, खासकर जब यह एक लंबे जेनेरिक < OtherGeneric < टी, यू, है वी>, शब्दकोश < पहला, दूसरा >> >

2

इस पर एक अच्छी चर्चा @Coding Horror

व्यक्तिगत तौर पर मैं कम से कम इसके उपयोग रखने की कोशिश हुई थी, मैंने पाया यह विशेष रूप से पठनीयता दर्द होता है जब एक विधि कॉल से एक चर बताए गए हैं।

4

@jongalloway - var आपके कोड को और अधिक पढ़ा नहीं जा सकता है।

var myvariable = DateTime.Now 
DateTime myvariable = DateTime.Now; 

पहले बस के रूप में दूसरे के रूप में पढ़ी जा सकती है, और यहाँ कम काम

var myvariable = ResultFromMethod(); 

की आवश्यकता है, तो आप एक बिंदु है, वर कोड कम पठनीय बना सकता है। मुझे var पसंद है क्योंकि अगर मैं दशमलव को एक डबल में बदलता हूं, तो मुझे इसे स्थानों के समूह में बदलने की ज़रूरत नहीं है (और रिएक्टर नहीं कहें, कभी-कभी मैं भूल जाता हूं, बस मुझे var!)

संपादित करें: बस लेख पढ़ें, मैं सहमत हूं। जबरदस्त हंसी।

1

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

अच्छे उपकरण आपको दोनों दुनिया के सर्वश्रेष्ठ होने देते हैं।

जॉन।

0

वहाँ इस विषय पर एक really good MSDN article है एक यह कुछ मामलों की रूपरेखा जहां वर का उपयोग नहीं कर सकते हैं:

  • var can only be used when a local variable is declared and initialized in the same statement; the variable cannot be initialized to null, or to a method group or an anonymous function.
  • var cannot be used on fields at class scope.
  • Variables declared by using var cannot be used in the initialization expression. In other words, this expression is legal: int i = (i = 20); but this expression produces a compile-time error: var i = (i = 20);
  • Multiple implicitly-typed variables cannot be initialized in the same statement.
  • If a type named var is in scope, then the var keyword will resolve to that type name and will not be treated as part of an implicitly typed local variable declaration.

मैं इसे जाँच की सिफारिश करेंगे:

निम्नलिखित प्रतिबंधों के परोक्ष टाइप चर घोषणाओं लागू अपने कोड में var का उपयोग करने के पूर्ण प्रभाव को समझने के लिए बाहर।

10

मैं इसका उपयोग केवल तभी करता हूं जब यह स्पष्ट रूप से स्पष्ट हो कि var क्या है।

स्पष्ट मेरे लिए:

मेरे लिए
XmlNodeList itemList = rssNode.SelectNodes("item"); 
var rssItems = new RssItem[itemList.Count]; 

स्पष्ट नहीं:

var itemList = rssNode.SelectNodes("item"); 
var rssItems = new RssItem[itemList.Count]; 
0

I'm seeing a pattern for stackoverflow success: dig up old CodingHorror posts and (Jeopardy style) phrase them in terms of a question.

मैं निर्दोष वकालत! लेकिन आप सही हैं, यह अपेक्षाकृत लोकप्रिय छोटे प्रश्न प्रतीत होता है।

9

मैंने जो जवाब देखा है उसका सबसे अच्छा सारांश Eric Lippert's comment है, जो अनिवार्य रूप से कहता है कि आपको ठोस प्रकार का उपयोग करना चाहिए यदि यह महत्वपूर्ण है कि प्रकार क्या है, लेकिन अन्यथा नहीं। अनिवार्य रूप से प्रकार की जानकारी उन स्थानों के लिए आरक्षित की जानी चाहिए जहां प्रकार महत्वपूर्ण है।

मेरी कंपनी का मानक हर जगह var का उपयोग करना है, जिसे हम reading various recommendation and then spending some time trying it out to see whether the lack of annotated type information was a help or a hindrance के बाद आए थे। हमने महसूस किया कि यह एक मदद थी।

लोगों द्वारा अनुशंसित अधिकांश सिफारिशें (उदा। डियर की एक) उन लोगों द्वारा की गई सिफारिशें हैं जिन्होंने कंक्रीट प्रकार के बजाय var का उपयोग करके कोडिंग करने की कोशिश नहीं की है। इससे सिफारिशें सभी बेकार हैं, क्योंकि वे अनुभव से बात नहीं कर रहे हैं, वे केवल extrapolating हैं।

सबसे अच्छी सलाह जो मैं आपको दे सकता हूं वह है कि आप इसे अपने लिए आज़माएं, और देखें कि आपके और आपकी टीम के लिए क्या काम करता है।

1

यह केवल तब समझ में आता है जब आप अग्रिम प्रकार को नहीं जानते हैं।