क्या Microsoft C # में 'var' के उपयोग को हतोत्साहित कर रहा है? (VS2017)


16

मैं आगामी विज़ुअल स्टूडियो 2017 को देख रहा हूं ।

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

बढ़ाया उत्पादकता VS2017

कोड में स्पष्ट रूप से कई समस्याएं हैं जिन्हें विज़ुअल स्टूडियो ने 'जरूरतों को ठीक करने' के रूप में पहचाना है।

मैं C # में var के उपयोग के बारे में अपनी समझ को दोबारा जाँचना चाहता था, इसलिए मैंने 2011 से एरिक लिपर्ट के एक आर्टिकल को पढ़ा जिसका उपयोग और निहित टाइपिंग का दुरुपयोग है

एरिक कहते हैं:

  • जब आपको करना हो तो var का उपयोग करें; जब आप अनाम प्रकारों का उपयोग कर रहे हों।
  • Var का उपयोग तब करें जब घोषणा का प्रकार इनिशियलाइज़र से स्पष्ट होता है, खासकर यदि यह एक ऑब्जेक्ट निर्माण है। इससे अतिरेक दूर होता है।
  • यदि कोड कोड के अर्थ "व्यापार उद्देश्य" पर जोर देता है और इसके भंडारण के "यांत्रिक" विवरणों को हटाता है, तो संस्करण का उपयोग करने पर विचार करें।
  • स्पष्ट प्रकार का उपयोग करें यदि ऐसा करना कोड को सही ढंग से समझने और बनाए रखने के लिए आवश्यक है।
  • वर्णनात्मक नाम का उपयोग करें चाहे आप "var" का उपयोग करें। परिवर्तनीय नामों को चर के शब्दार्थ का प्रतिनिधित्व करना चाहिए, न कि इसके भंडारण का विवरण; "दशमलव" बुरा है; "ब्याज देना" अच्छा है।

मुझे लगता है कि कोड में अधिकांश var उपयोग संभवतः ठीक है। मुझे लगता है कि बिट के लिए var का उपयोग नहीं करना ठीक होगा जो पढ़ता है ...

var tweetReady = workouts [ ... ]

... क्योंकि शायद यह 100% तत्काल नहीं है कि यह किस प्रकार का है, लेकिन फिर भी मैं बहुत जल्दी जानता हूं कि यह एक है boolean

वर इस हिस्से के लिए उपयोग ...

var listOfTweets = new List<string>();

... मुझे बिल्कुल वैरिएशन का अच्छा उपयोग पसंद है क्योंकि मुझे लगता है कि यह निम्नलिखित करने के लिए बेमानी है:

List<string> listOfTweets = new List<string>();

हालांकि एरिक क्या कहता है, इसके आधार पर, लिस्ट के बजाय वेरिएबल शायद ट्वीट होना चाहिए ।

varयहाँ उपयोग के सभी को बदलने का कारण क्या होगा ? क्या इस कोड में कुछ गड़बड़ है जो मुझे याद आ रही है?


स्क्रीनशॉट में कोड बिलकुल उसी तरह का है जिस बात से आप सहमत हैं कि आपको var ... Clarification का उपयोग नहीं करना चाहिए?
तेलस्टिन

1
मुझे लगता है कि यहां सभी उपयोग varठीक हैं। आप संभवतः एक बदल सकते हैं - लेकिन फिर भी मुझे लगता है कि यह वास्तव में आवश्यक नहीं है। उन सभी को स्पष्ट प्रकार में क्यों बदलें?
रोवन फ्रीमैन

2
ध्यान रखें कि मनुष्यों के लिए जो स्पष्ट है वह दृश्य स्टूडियो के लिए हमेशा स्पष्ट नहीं होता है।
कैंडिड_ओरेंज

सब? आपके पास स्क्रीनशॉट में एक त्रुटि है जो स्पष्ट रूप से संबंधित है।
तेलस्टीन

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

जवाबों:


27

TL; DR: नहीं, Microsoft C # में 'var' के उपयोग को हतोत्साहित नहीं कर रहा है। छवि को केवल यह समझने के लिए संदर्भ की कमी है कि यह शिकायत क्यों कर रहा है।

यदि आप VS2017 RC स्थापित करते हैं और विकल्प पैनल खोलते हैं और जाते हैं Text Editor -> C#, तो आपको एक नया अनुभाग दिखाई देगा Code Style:। यह कुछ समय के लिए ReSharper की पेशकश के समान है: कोडिंग शैलियों के लिए कॉन्फ़िगर करने योग्य नियमों का एक सेट।

इसमें उपयोग के आसपास तीन विकल्प शामिल हैं var: बिल्ड-इन प्रकारों के लिए, जब चर प्रकार स्पष्ट और "अन्यत्र" होता है। प्रत्येक स्थिति में, आप "स्पष्ट प्रकार पसंद करते हैं" या "वर पसंद करें" को निर्दिष्ट कर सकते हैं और अधिसूचना स्तर को "कोई नहीं", "सुझाव", "चेतावनी" या "त्रुटि" पर सेट कर सकते हैं:

यहाँ छवि विवरण दर्ज करें


3
डिफ़ॉल्ट क्या है? यदि "फ़ैक्टरी सेटिंग" "स्पष्ट प्रकार को प्राथमिकता दें" तो यह तर्क दिया जा सकता है कि एमएस उपयोग को हतोत्साहित कर रहा है var
जैक्सबी

@JacquesB, चूक स्क्रीन शॉट में दिखाए गए हैं। जैसा कि सभी "कोई नहीं" पर सेट हैं, यह जानना मुश्किल है कि क्या "स्पष्ट प्रकार को प्राथमिकता दें" सक्रिय रूप से एमएस के पसंदीदा तरीके के रूप में सेट है, या क्या यह सिर्फ "शून्य मान" है। जहां तक ​​मेरा सवाल है, सबसे अच्छा सभी पक्ष देवता हैं var, इसलिए मुझे इस बात का ज्यादा ध्यान नहीं है कि इस विषय पर एमएस के क्या विचार हैं।
डेविड अर्नो

6

मुझे लगता है कि आप इसमें बहुत अधिक पढ़ रहे हैं। तो, एक ऐसी सुविधा है जो आपको स्पष्ट प्रकार के एनोटेशन के साथ निहित टाइपिंग के उपयोग को बदलने की अनुमति देती है, और आप इससे निष्कर्ष निकालते हैं, कि अंतर्निहित टाइपिंग को हतोत्साहित किया जाता है। सीआईएल को CIL बायोटेक को संकलित करने की एक विशेषता भी है, क्या आप इससे यह निष्कर्ष निकालेंगे कि C♯ को हतोत्साहित किया गया है और हम सभी को इसके बजाय CIL bytecode लिखना चाहिए? शायद ऩही।

Microsoft केवल आपके कोड की IDE की गहरी समझ को दिखा रहा है। यह आपके लिए आपके प्रकारों को भी लिख सकता है, बिना आपको उन्हें वर्तनी के। बस।

यह केवल आईडीई की कोड समझ क्षमताओं को दिखाने का एक अच्छा उदाहरण है। यह छोटा और स्व-निहित है (एक बड़ी रिफैक्टिंग दिखाने के विपरीत), यह सभी संस्करणों में उपलब्ध है और सभी डेवलपर्स के लिए लागू है (कुछ बहुत प्रभावशाली वास्तु दृश्य विशेषताओं के विपरीत जो केवल अंतिम में उपलब्ध हैं और एक महत्वपूर्ण हिस्से पर लागू नहीं होते हैं वीएस के संभावित उपयोगकर्ता जिनके पास कभी भी बड़ी परियोजनाएं नहीं होंगी), और हालांकि यह बहुत सरल है (यह वास्तव में सटीक वही काम csc.exeकर रहा है जो तब से कर रहा हैvarपेश किया गया था), यह निश्चित रूप से प्रभावशाली दिखता है, विशेष रूप से ऐसे व्यक्ति को जो वास्तव में निहित टाइपिंग और टाइप इंफ़ेक्शन को नहीं समझता है (या जो "टाइप इंट्रेंस" को गूगल करने की कोशिश करता है और हिंडले-मिलनर, एकीकरण, बैकट्रैकिंग जैसे शब्दों से अभिभूत हो जाता है, जब वास्तव में C का स्थानीय-केवल निष्कर्ष अत्यंत सरल और सीधा है)।

तो, संक्षेप में: यह एक आईडीई सुविधा को दिखाने का एक आकर्षक तरीका है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.