var

2009-08-11 14 views
10

के अलावा अन्य घुमावदार चर के लिए बेहतर शब्द यह बंद हो सकता है, लेकिन मैं वैसे भी कोशिश करूंगा।var

मैं दूसरे दिन अपने सी # कोड में एक वीबी 6 प्रोग्रामर दिखा रहा था और उसने विभिन्न कीवर्ड देखा और "ओह वैरिएंट टाइप" जैसा था, जब आप ऐसा करते हैं तो यह वास्तव में मजबूत टाइपिंग नहीं होता है। " और मुझे ठेठ "var! = VARIANT" भाषण पर जाना था ताकि उसे समझाया जा सके कि यह एक भिन्नता नहीं है, यह केवल संकलक अनुमानित है।

मैं अन्य शब्दों के बारे में सोच रहा था कि वे (सी # टीम) इस्तेमाल कर सकते थे इसलिए इस तरह की चीज नहीं हुई। मैं व्यक्तिगत रूप से तरह अनुमान, की तरह कुछ:

infer person = new Person("Bob"); 

मैं जानता हूँ कि यह वास्तव में है कि इस समझौते के बड़ा, लेकिन सिर्फ देखने के लिए अन्य लोगों को एक ही बात करने के लिए प्रयोग करेंगे क्या उत्सुक नहीं है।

मैंने इसे एक समुदाय विकी बना दिया है क्योंकि इसका वास्तव में कोई जवाब नहीं है।

+0

उस बेन के लिए धन्यवाद। –

+0

कोई समस्या नहीं है। –

+1

एक निकल का अनुमान लगाएं, एक डाइम का अनुमान लगाएं। –

उत्तर

7

C++ 0x प्रकार निष्कर्ष के लिए "ऑटो" कीवर्ड का उपयोग करता है:

http://en.wikipedia.org/wiki/C%2B%2B0x#Type_inference

उन लोगों के लिए एक बुरी व्यापार बंद के बाद से "ऑटो" था (AFAIK) पहले से ही एक कीवर्ड नहीं है यही कारण है कि। मैं सी # में यह कल्पना कर सकते हैं:

auto i = 3; 

मैं "का अनुमान लगा" हालांकि पसंद करते हैं (लेकिन फिर मैं "var" किसी के साथ कोई समस्या नहीं है)।

+4

'ऑटो' वास्तव में एक कीवर्ड था, इसलिए यह पुन: उपयोग के लिए एक प्रमुख उम्मीदवार था, लेकिन यह भी सही लगता है।इसे उसी संदर्भ में डी भाषा द्वारा भी उठाया गया था, इसलिए यह थोड़ी बढ़ रही है। –

+0

विशेष रूप से क्योंकि यह पूरी तरह से बेकार कीवर्ड था। –

+0

भयानक कीवर्ड। आप "मैटिक" नामक एक और भी हो सकते हैं। फिर आपके पास फू और बार जैसी मिलान करने वाली जोड़ी होगी। –

1

मुझे लगता है कि यह एक अच्छा विचार है। मुझे स्वयं को समय-समय पर विभिन्न कीवर्ड को समझाना पड़ता है और यह वास्तव में एक प्रकार के लिए प्लेसहोल्डर कैसे है और यह अभी भी मजबूत टाइपिंग का बीमा करता है।

अनुमान मेरे लिए काम करता है! :)

0

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

2

लेकिन "अनुमान" है 2 से अधिक "वर" ... शायद "वर" वर्ण पहली बार में एक VB6 प्रोग्रामर के सामने डाल करने के लिए सबसे अच्छी बात नहीं था ...

+0

मैं कुछ बेहतर सोचने की कोशिश कर रहा था, फिर "infer" लेकिन "inf" सही महसूस नहीं कर रहा था और int के करीब था, और "fer" ... बस सादा गलत था। –

+0

हाहा यह सिर्फ "वी" होना चाहिए: v कुत्ता = नया कुत्ता(); बहुत बेहतर होगा! –

1

कैसे foo?

+0

हाँ, var से बहुत बेहतर;) –

+0

मुझे लगता है कि हमें "बार" कीवर्ड भी चाहिए। हो सकता है कि अपवाद फेंकने के लिए आप "foobar NotImplementedException()" –

1

दूसरी ओर, पास्कल/डेल्फी और एक्शनस्क्रिप्ट प्रोग्रामर तुरंत var के वास्तविक अर्थ को समझते हैं। तो क्यों वीबी 6 बाहर एकल? यह दुर्भाग्यपूर्ण है कि इसमें Variant था, और इसलिए वीबी 6 लोग इसके लिए var को तुरंत बदलते हैं, लेकिन इससे कोई फर्क नहीं पड़ता कि आप किस तरह से जाते हैं, कोई कहीं भ्रमित हो जाएगा।

यह देखते हुए कि वीबी 6 अब कुछ समय के लिए विरासत है, var पिछले अनुभव के बोझ के बिना किसी के लिए बिल्कुल स्पष्ट है (मेरा मतलब है, प्रोग्रामिंग के लिए नए लोग var के बारे में सोचेंगे, जिसका मतलब है "परिवर्तनीय" ?), और var का उपयोग विशेष रूप से कई अन्य लोकप्रिय भाषाओं द्वारा "परिवर्तनीय" के लिए किया गया है, यह खराब विकल्प की तरह प्रतीत नहीं होता है।

जैसा कि मैंने देखा है infer कीवर्ड के साथ स्पष्ट समस्या यह है कि यह स्पष्ट नहीं है कि यह चर के प्रकार का अनुमान लगाता है। बस इसे देखकर, यह इसके मूल्य या कुछ का भी उल्लंघन कर सकता है (विशेष रूप से यदि आरएचएस new -स्टेटमेंट नहीं है)।

3

पुरानी BASIC कीवर्ड LET को पुनर्जीवित करने के बारे में कैसे?

let answer = 42; 
+0

वीबी 6 लोग तब भी भ्रमित हो जाएंगे; लेट कीवर्ड (किसी प्रॉपर्टी पर) केवल साधारण डेटा टाइप के लिए उपयोग किया जाता है, जबकि सेट केवल ऑब्जेक्ट्स के लिए उपयोग किया जाता है। – Gavin

1

मैं var पसंद है, और लगता है कि एक जोरदार टाइप भाषा के संदर्भ में अर्थ स्पष्ट है। दूसरी ओर, dynamic, सी # कोड में "oddball" है, इसलिए लंबा अर्थपूर्ण नामांकन उचित है।

4
thisappearsweaklytypedbutisactuallystronglytyped i = 3; 

यह भ्रम से बचने का एकमात्र तरीका है! चिंता न करें, स्वत: पूर्ण मतलब यह वास्तव में टाइप करने में अधिक समय नहीं लेगा ...

1

सी # सभी प्रतीकात्मक रूप से माना जाता है, जैसे सी ++, सभी कीवर्ड नहीं, जैसे वीबी। कैसे के बारे में "?"

? X = 5; 
? Y = X.ToString(); 
? Z = Y + Y; 

किस प्रकार जेड है? कौन जानता है?

+0

एक स्ट्रिंग? वैसे भी, '?' सशर्त ऑपरेटर के लिए लिया जाता है। – Blorgbeard

+0

मुझे बस इतना लगता है कि "प्रतीकात्मक रूप से" सी ++ हर बार जब मैं 'reinterpret_cast' या 'static_assert' टाइप करता हूं ... –

+0

यह संभवतः कभी-कभी एक नामुमकिन प्रकार से उलझन में पड़ सकता है (किसी भी ऑफहैंड के बारे में सोच नहीं सकता), लेकिन मुझे यह कुल मिलाकर पसंद है। – RCIX

1

मुझे लगता है कि सी # किसी भी "स्थैतिक प्रकार अनुमान" कीवर्ड के साथ बेहतर होगा। तो यह इस तरह काम करेगा:

myDict = new Dictionary<string, MyClass>(); 

मैं सोच रहा था क्यों सी # डिजाइनरों "var" स्थैतिक प्रकार निष्कर्ष के लिए जरूरत थी जैसा कोई कीवर्ड महसूस किया। क्या सी # के मौलिक व्याकरण नियमों का पालन करना आवश्यक था? ऐसा इसलिए था क्योंकि उन्होंने पहले ही "गतिशील" के बारे में सोचा था और स्थिर और गतिशील प्रकार अनुमान के बीच भेद को और स्पष्ट करना चाहते थे?

किसी भी मामले में, पाइथन के लंबे समय तक एक्सपोजर के बाद, "var" (या कोई वैकल्पिक कीवर्ड या क्वालीफायर) पूरी तरह से अनिवार्य महसूस करता है। निम्नलिखित कोड लें:

foreach (item in myList) { 
    // Do stuff 
} 

पाठक को "आइटम" के सामने "var" जोड़ने वाली अतिरिक्त जानकारी क्या होगी?

+0

"var" पाठक को बताता है कि प्रोग्रामर ने सिर्फ एक गूंगा गलती नहीं की और इस प्रकार को छोड़ दिया। मुझे यकीन है कि पार्सर के लिए भी यह बहुत आसान है। केवल एक अनुमान है, लेकिन मैं एक कीवर्ड से शुरू करने के लिए शर्त लगाता हूं कि पार्सर को बीयरिंग मिलती है। –

+0

@ जॉन सॉंडर्स: या यहां तक ​​कि एक गड़बड़ गलती करें और चर को गलत वर्तनी दें। – supercat

+0

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

0

विषय पर पूरी तरह से नहीं, लेकिन वीबी.नेट यह लगभग साफ-सफाई करता है। मुझे लगता है कि यह पूर्व वीबी 6 उपयोगकर्ताओं के लिए और भी भ्रमित है।

Dim p = New Person() 

क्या देर से बाध्यकारी या टाइप अनुमान का उपयोग करना है? बेहतर अपने प्रोजेक्ट गुणों की जांच करें।

+0

मैं उस मामले के लिए "Dim P = New Person()" का संदर्भ देता हूं जहां प्रारंभिक मान एक कन्स्ट्रक्टर अभिव्यक्ति है। – supercat

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