क्या वीबी वास्तव में असंवेदनशील है?


122

मैं यहां एक तर्क शुरू करने की कोशिश नहीं कर रहा हूं, लेकिन जो भी कारण से, यह आमतौर पर कहा गया है कि विजुअल बेसिक असंवेदनशील है और सी भाषाएं नहीं हैं (और किसी तरह यह अच्छी बात है)।

लेकिन यहाँ मेरा सवाल है: जहां वास्तव में विजुअल बेसिक केस असंवेदनशील है? जब मैं टाइप करता हूँ ...

Dim ss As String
Dim SS As String

... विजुअल स्टूडियो 2008 या विज़ुअल स्टूडियो 2010 आईडीई में, दूसरे को " वर्तमान ब्लॉक में स्थानीय चर SSपहले ही घोषित किया गया है " की चेतावनी है । VBA VBE में, यह तुरंत एक त्रुटि नहीं करता है, बल्कि केवल ऑटो-केस को सही करता है।

क्या मुझे इस तर्क से कुछ याद आ रहा है कि विजुअल बेसिक संवेदनशील नहीं है? (इसके अलावा, यदि आप जानते हैं या जवाब देने के लिए परवाह है, तो यह एक बुरी बात क्यों होगी?)

मैं भी यह सवाल क्यों पूछ रहा हूं?

मैंने कई वर्षों तक अपनी कई बोलियों में विज़ुअल बेसिक का उपयोग किया है, कभी-कभी एक हॉबीस्ट के रूप में, कभी-कभी एक कार्यक्षेत्र में छोटे व्यवसाय से संबंधित कार्यक्रमों के लिए। पिछले छह महीनों के दौरान, मैं एक बड़ी परियोजना पर काम कर रहा हूं, जो मैंने अनुमान से बहुत बड़ा है। नमूना स्रोत कोड का अधिकांश भाग C # में है। मुझे C # सीखने की कोई ज्वलंत इच्छा नहीं है, लेकिन अगर ऐसी चीजें हैं जो मुझे उस C # ऑफ़र में याद आ रही हैं, जो Visual Basic नहीं करता है (इसके विपरीत VB.NET एक्सएमएल साहित्य प्रदान करता है ), तो मैं चाहूंगा उस सुविधा के बारे में अधिक जानने के लिए। तो इस मामले में, यह अक्सर तर्क दिया जाता है कि C भाषाएँ संवेदनशील हैं और यह अच्छा है और Visual Basic असंवेदनशील है और यह बुरा है। मैं जानना चाहता हूं...

  1. विजुअल बेसिक मामला कितना असंवेदनशील है क्योंकि कोड एडिटर में हर एक उदाहरण संवेदनशील होता है (मतलब केस सही हो जाता है) कि मैं यह चाहता हूं या नहीं।
  2. क्या यह मेरे लिए काफी मजबूर करने वाला है कि हम C # में जाने पर विचार करें यदि VB.NET मामला किसी तरह से सीमित है तो मैं कोड के साथ क्या कर सकता हूं?

5
+1 मैंने पहले भी इसी बात के बारे में सोचा है।
NakedBrunch

7
उम्म्म ... यकीन नहीं होता कि आप समझ गए हैं कि संवेदनशील मामलों में क्या मामला है। क्योंकि वीबी तथ्य केस संवेदी में है, एस एस और एस एस कर रहे हैं , एक ही नाम है, जबकि सी में वे नहीं होगा।
एड एस।

1
@ed: मैं दोनों SSऔर ssVB में उपयोग नहीं कर सकता , जो भी मैं पहले उपयोग करता हूं वह वह है जो संपादक उपयोग करता है।
टोड मेन

1
ओटाकु, मैं निश्चित रूप से इस सवाल को रखने की सलाह देता हूं कि वीबी के मामले में असंवेदनशील होने का क्या मतलब है और इसे कैसे लागू किया गया है। यह सवाल कि क्या भाषा के मामले में असंवेदनशील होना बेहतर है, दुख की बात है कि लौ युद्ध शुरू कर सकती है। यदि आप वास्तव में उत्सुक हैं, तो इसे दूसरे प्रश्न में पूछें। (मैं आपको सलाह देता हूं कि आप ऐसा न करें, लेकिन अगर आपको इसे व्यक्तिपरक टैग करना चाहिए और इसे सामुदायिक विकि बनाना चाहिए)
MarkJ

16
आप इस (उल्टे) के बारे में सोच रहे थे। यह ठीक है क्योंकि संकलक केस-असंवेदनशील है कि त्रुटि 'चर एसएस पहले से ही घोषित है' पढ़ता है। यदि यह मामला-संवेदी था, तो आपको या तो 'ss वैरिएबल का उपयोग नहीं किया गया था' या किसी भी तरह की कोई त्रुटि नहीं है और यदि आपने वैकल्पिक रूप से एक का उपयोग किया है तो बग नहीं होगा।
एड्रियानो वरोली पियाज्जा

जवाबों:


108

VBA और VB.NET के बीच का अंतर सिर्फ इसलिए है क्योंकि VB.NET पृष्ठभूमि में लगातार संकलन करता है। जब आप VBA संकलित करेंगे तो आपको एक त्रुटि मिलेगी।

जैसे जोनाथन कहते हैं , जब प्रोग्रामिंग आप VB.NET को स्ट्रिंग-तुलना, एक्सएमएल और कुछ अन्य स्थितियों के अलावा असंवेदनशील के रूप में सोच सकते हैं ...

मुझे लगता है कि आप हुड के नीचे क्या रुचि रखते हैं। खैर, .NET कॉमन लैंग्वेज रनटाइम केस-सेंसिटिव है , और VB.NET कोड रनटाइम पर निर्भर करता है, इसलिए आप देख सकते हैं कि रनटाइम पर केस-सेंसिटिव होना चाहिए, जैसे कि यह वेरिएबल्स और तरीके देख रहा है।

VB.NET संकलक और संपादक आपको इसकी अनदेखी करते हैं - क्योंकि वे आपके कोड में मामले को सही करते हैं

यदि आप गतिशील सुविधाओं या लेट-बाइंडिंग (ऑप्शन स्ट्रिक्ट ऑफ) के साथ खेलते हैं, तो आप साबित कर सकते हैं कि अंतर्निहित रन-टाइम केस-संवेदी है। यह देखने का एक और तरीका यह है कि C # जैसी केस-संवेदी भाषाएं समान रनटाइम का उपयोग करती हैं, इसलिए रनटाइम स्पष्ट रूप से केस-सेंसिटिविटी का समर्थन करता है।

संपादित करें यदि आप समीकरण से आईडीई लेना चाहते हैं, तो आप हमेशा कमांड-लाइन से संकलन कर सकते हैं । में अपना कोड संपादित नोटपैड तो यह है ssऔर SSऔर देखते हैं कि संकलक करता है।

.NET फ्रेमवर्क डिजाइन दिशानिर्देश पृष्ठ 45 में जेफरी रिक्टर से EDIT उद्धरण ।

स्पष्ट होने के लिए, सीएलआर वास्तव में केस-संवेदी है। विजुअल बेसिक जैसी कुछ प्रोग्रामिंग लैंग्वेज केस असंवेदनशील हैं। जब Visual Basic कंपाइलर C # जैसी केस-संवेदी भाषा में परिभाषित प्रकार के लिए कॉल करने की कोशिश कर रहा होता है, तो कंपाइलर (CLR नहीं) विधि के नाम के वास्तविक मामले का पता लगाता है और उसे मेटाडेटा में एम्बेड करता है। सीएलआर को इस बारे में कुछ नहीं पता है। अब यदि आप किसी विधि से बाँधने के लिए प्रतिबिंब का उपयोग कर रहे हैं, तो प्रतिबिंब API केस-असंवेदनशील लुकअप करने की क्षमता प्रदान करता है। यह वह सीमा है जिसमें CLR केस-असंवेदनशीलता प्रदान करता है।


सबसे अच्छा जवाब मैंने अब तक सुना है। क्या इस बिंदु को साबित करने के लिए कोई है कि VB.Net संकलक और संपादक आपको इसकी अनदेखी करते हैं ? क्या ऑटो-सही बंद करने का कुछ तरीका है? या वहाँ एक SLN कि है संकलित करने के लिए एक रास्ता है नहीं वी.एस. आईडीई में MSBuild में लिखा है कि का उपयोग करता है दोनों ssऔर SSऔर यह संकलन होगा और काम के रूप में उम्मीद?
टोड मेन

5
आप धोखा देकर ऑटो-सही बंद कर सकते हैं। Vb फ़ाइल पर राइट-क्लिक करें और "ओपन विथ" चुनें। फिर "XML (पाठ) संपादक" जैसा कुछ चुनें। आप ऑटो-सही जैसे सभी VB- विशिष्ट कार्यक्षमता खो देंगे।
जोनाथन एलन

+1 महान उत्तर, और अच्छा प्रश्न और साथ ही ओताकु (मुझे लगता है कि आप पहले से ही जानते थे लेकिन एक अच्छी परिभाषा निकालना चाहते थे?)
अनाम टाइप

VB.NET संकलक / IDE 100% केस-असंवेदनशील नहीं है। उदाहरण के लिए Dim pdfWriter As PDFWriterपूरी तरह से वैध है। VB.NET आपको वर्ग नामों और चर नामों के बीच अंतर करने की अनुमति देता है, जो कि एक अच्छा स्पर्श है, क्योंकि यह पूरी तरह से मामले के प्रति संवेदनशील भाषाओं में आम बात है।
ingredient

VB रास्ता इंटरऑपरेबिलिटी के लिए सही है। उदाहरण: स्ट्रिंग और ईमेल () के रूप में ईमेल में C # में DLL बनाएँ, इसमें inotifypropertychanged घटना वाली संपत्ति के रूप में। C # ठीक संकलन करेगा और DLL उत्पन्न होगा। इस DLL को VB या किसी भी समान भाषा में संदर्भित करने का प्रयास करें। यह कहेंगे कि लाइब्रेरी में वैरिएबल ईमेल / ईमेल में संघर्ष है। कोड विश्लेषण उपकरण इसे C # संकलक में VB संकलक में एक समस्या के रूप में इंगित करता है।
वेंकट

22

यहाँ समस्या का एक हिस्सा आपको आईडीई के अनुभव से भाषा को विभाजित करने की आवश्यकता है।

भाषा के रूप में, VB.NET निश्चित रूप से पहचानकर्ताओं के संबंध में असंवेदनशील मामला है। कॉल करना DateTime.Parseऔर datetime.parseठीक उसी कोड से बाइंड करना होगा। और सी # जैसी भाषाओं के विपरीत, उन तरीकों या प्रकारों को परिभाषित करना संभव नहीं है जो केवल मामले से भिन्न होते हैं।

IDE के रूप में, VB.NET मौजूदा पहचानकर्ताओं के मामले को संरक्षित करने का प्रयास करता है जब यह कोड के एक ब्लॉक को सुंदर रूप से सूचीबद्ध करता है। जब भी आप कोड की वर्तमान तार्किक रेखा से दूर जाते हैं, तो सुंदर सूचियाँ आती हैं। इस मामले में, आप दूसरी घोषणा से हटते हैं SS, सुंदर लिस्टर नोटिस उस नाम के साथ एक मौजूदा पहचानकर्ता है और मिलान वाले मामले को सही करता है।

यह व्यवहार, हालांकि, विशुद्ध रूप से उपयोगकर्ता मूल्य जोड़ने के रूप में किया जाता है। यह मूल भाषा का हिस्सा नहीं है।


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

1
मुझे नहीं लगता कि जारेड का मतलब केवल आईडीई है। मुझे लगता है कि उन्होंने कहा है संकलक केस-संवेदी है, यह तो सोचता है कि ssके समान है SS, लेकिन यह भी आईडीई करेक्ट्स पढ़ने के लिए एक सहायता के रूप में SSकरने के लिए ssआपके द्वारा लिखते ही। यहां तक ​​कि अगर आईडीई ने मामले को ठीक नहीं किया, तो भी कंपाइलर दो पहचानकर्ताओं को समान दिखाई देगा।
MarkJ

2
"मैं अभी भी यह समझने में विफल हूं कि एक से अधिक नाम रखने के लिए यह एक अच्छी बात क्यों होगी नाम में सिर्फ मामले के अंतर से अलग-अलग चीजों का प्रतिनिधित्व करते हैं" <- मुझे VBA / VB6 / VB.NET से C # पर स्विच करने से पहले उसी तरह महसूस हुआ। , मैंने सोचा कि केवल मामलों से अलग होने वाले नाम एकमुश्त खतरनाक लगते हैं। व्यवहार में, हालांकि, यह काफी उपयोगी साबित होता है, और, आश्चर्यजनक रूप से, त्रुटियों के लिए बिल्कुल भी नहीं।
माइक रोसेनब्लम

2
@ मैं उस बात से बहुत असहमत हूं। मैंने कभी भी मिश्रित आवरण वाले नाम नहीं देखे हैं जो कुछ भी करते हैं लेकिन भ्रम का कारण बनते हैं।
जारेपपार

2
वास्तव में? मेरा मतलब है शून्य सेट कलर (रंग रंग) {this.color = color}; मुझे लगता है कि यह खतरनाक लग सकता है, लेकिन यह सुचारू रूप से काम करता है, संकलक आपको गलती नहीं करने देगा, और IntelliSense आपको "रंग" के बाद सही सदस्य देता है। बनाम "रंग।" जो चीज़ मुझे यहाँ परेशान करती है, वह यह है कि "इस" के उपयोग की आवश्यकता नहीं है - यह FxCop और / या StyleCop द्वारा लागू किया गया है (जो मैं भूल जाता हूं), लेकिन मेरी इच्छा है कि IDE हमेशा कक्षा लागू करते समय इसे लागू करने के लिए एक सेटिंग थी सदस्यों के बजाय संभावित गुंजाइश गलती से छाया होने की अनुमति देता है।
माइक रोसेनब्लम

16

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


3
जहाँ XML XML और स्ट्रिंग तुलना की तरह मामले पर अच्छे अंक। लेकिन जब हम कहते हैं कि यह ज्यादातर असंवेदनशील है, तो हम वास्तव में क्या बात कर रहे हैं? आउटलुक VBA पर चलते हुए, एक उदाहरण के रूप में, यदि मैं टाइप करता हूं Dim mi as mailitemऔर subject = mi.subject, ऑब्जेक्ट नाम ऑटो-सुधारा जाएगा MailItemऔर mi.Subject। क्या कंपिलियर देखभाल करता है (क्योंकि यह हमेशा इसे ऑटो-सही करेगा ) या यह सुंदर कोड है या ...?
टोड मुख्य

1
संकलक परवाह नहीं करता है। आप नोटपैड में एक फ़ाइल को संपादित करके और कमांड-लाइन कंपाइलर का उपयोग करके इसका परीक्षण कर सकते हैं।
जोनाथन एलन

9

हां, VB.NET संकलक पहचानकर्ताओं को एक मामले में असंवेदनशील तरीके से व्यवहार करता है। और हाँ, यह समस्या पैदा कर सकता है जब यह उन असेंबली का उपभोग करता है जो किसी अन्य भाषा में लिखी गई थीं या COM घटकों का उपयोग करती हैं। पूर्व का मामला कॉमन लैंग्वेज स्पेसिफिकेशन द्वारा कवर किया गया है । प्रासंगिक नियम है:

अलग पहचाने जाने वाले दो पहचानकर्ताओं के लिए, उन्हें अपने मामले से अधिक भिन्न होना चाहिए।

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


6

VB केस संरक्षण (IDE में) है, लेकिन मामला असंवेदनशील है । यह एक तरह से विंडोज फाइल सिस्टम की तरह है। Hello.txt और hello.txt को एक ही फ़ाइल नाम माना जाता है।

IDE मानता है कि एक चर उस चर के लिए "सही" मामला है, और उस चर के प्रत्येक उदाहरण को घोषणा से मेल खाता है। यह आंख-कैंडी और स्थिरता के कारणों के लिए करता है, लेकिन कार्यक्षमता के लिए नहीं।

मैंने कई उदाहरण देखे हैं जहां घोषणा के मिलान के लिए मामला स्वचालित रूप से नहीं बदला गया था, और बयान केवल एक ही काम करता है। आप कोड लिखने के लिए किसी भी टेक्स्ट एडिटर का उपयोग कर सकते हैं जो विभिन्न मामलों में बस ठीक संकलन करेगा।

एक साइड-नोट:

अधिकांश लोग केस-असंवेदनशील तरीके से सोचते हैं। जब हम "कुत्ता" शब्द देखते हैं तो हमारे मन में इस शब्द का अनुवाद किया जाता है। शब्द का अर्थ केस पर आधारित नहीं है (अर्थात चाहे वह "DOG", "DoG", या "dOG" को फिर भी वर्तनी करे)। COMPUTERS शब्दों को बिट्स के असतत बैग के रूप में देखता है। अपरकेस और लोअरकेस विभिन्न बिट पैटर्न हैं, और इस प्रकार अलग हैं।

चूंकि अधिकांश प्रोग्रामर मानव हैं, इसलिए केस असंवेदनशीलता लोगों के सोचने के तरीके के लिए अधिक अनुकूलित लगती है और केस सेंसिटिविटी मनुष्यों के बारे में अधिक होती है कि वे किसी मशीन की बाधाओं के बारे में कैसे सोचते हैं।


4
सिवाय इसके कि प्रोग्रामर को वस्तुओं और वर्गों के बीच अंतर करने की आवश्यकता है, और परंपरागत रूप से ऐसा करने के लिए मामले में बदलाव का उपयोग किया है (आवश्यक नहीं है, बस एक सम्मेलन)। ताकि object.method()और Object.Method()तुरंत वस्तु और वर्ग के संदर्भ और तरीकों के रूप में मान्यता प्राप्त हो (यदि आप उस कोडिंग कन्वेंशन के अनुरूप हैं)। अंग्रेजी में भी, आप उचित संज्ञा और वाक्यों की शुरुआत को ऊपरी केस अक्षर के साथ अलग करते हैं। इसलिए जब मैं पढ़ता हूं या प्रोग्रामिंग करता हूं तो मुझे लगता है कि यह मामला असंवेदनशील नहीं है, अन्यथा मुझे कुछ अर्थ याद आ रहा है।
जेसन एस

@ जेसन, यह सब आपके बारे में है जो आप के लिए उपयोग किया जाता है। नए सी प्रोग्रामिंग छात्र पहली बार में मामले की संवेदनशीलता के बारे में शिकायतों की असंख्य पेशकश करते हैं, फिर, कुछ पाठ्यक्रमों के बाद, इसकी आदत डालें। Object.method () और Object.Method () केवल एक कन्वेंशन है, और केस सेंसिटिविटी के लिए सबसे मजबूत केस है। मुझे किसी अन्य व्यक्ति द्वारा लिखित कार्यक्रम को संशोधित करना पड़ा, जिसमें एक ही दायरे में अस्थायी और अस्थायी नाम के दो चर थे, और मैं आपको बताता हूं कि उन्हें सीधे मेरे सिर में रखना बहुत मुश्किल था। और जब हम पूंजीकरण द्वारा एक सामान्य संज्ञा को पहचान सकते हैं, तो शब्द "बॉब" और "बॉब" हमारे दिमाग में एक ही अर्थ रखते हैं।
एंड्रयू नीली

उस मामले में आईडीई मामले को संरक्षित क्यों करता है? (माफ़ करना)। मुझे लगता है कि IDE केस को संरक्षित करता है क्योंकि MS डिजाइनरों को लगता है कि मामला मस्तिष्क में कुछ शब्दार्थ है, जो यह करता है। लेकिन वास्तव में VB IDE मानता है formऔर Formवही है, जो मुझे वैसे भी भ्रमित करने वाला है। मामले में (फिर से क्षमा करें), tempऔर Tempआप आसानी Tempसे bobTempया जो भी हो उसका नाम बदलने के लिए C # में रीफैक्टरिंग टूल का उपयोग कर सकते हैं । हालांकि, मैं कुछ वीबी बनाए रख रहा हूं और किसी ने जाकर किया है Dim form As Form। अब जब मैं नाम बदलता हूं, तो यह कक्षा और वस्तु दोनों संदर्भों का नाम बदल देता है। Bleah!
जेसन एस

@ जेसन, वीबी में मैं हमेशा कहता हूं "फॉर्म के रूप में डिम एफॉर्मर", लेकिन मैं पचाता हूं। VB खोज में केस संवेदनशीलता का समर्थन करता है। इसके अलावा, मैं "As Form" की खोज करूँगा और इसे "somethingstupid" से बदल दूंगा, फिर कुछ समझदार के लिए फॉर्म का नाम बदलूँगा, और फिर "somethingstupid" का नाम बदलकर "As Form" करूँगा। मुझे वास्तव में यह मामला बदलना पसंद है, क्योंकि यह पुष्टि करता है कि मैंने चर नाम पर वसा-उंगली नहीं की थी।
एंड्रयू नीली

हाँ, लेकिन यह एक रीफैक्टरिंग टूल के लिए कोई विकल्प नहीं है जो वर्ग और उदाहरण के संदर्भ के बीच अंतर करेगा जब नाम समान होते हैं (या केवल VB में मामले से भिन्न होते हैं)। सी # रीफैक्टरिंग उपकरण ऐसा करने में सक्षम प्रतीत होते हैं। मैं कक्षाओं का नाम नहीं लेता और उसी का उदाहरण देता हूं। C # में मैं अंतर करने के लिए केस का उपयोग करूंगा, लेकिन VB में मैं ऐसा नहीं कर सकता, इसलिए मैं अक्षरों का उपयोग करता हूं। जाहिर है मेरी समस्या यह है कि मैं किसी और को कोड बना रहा हूं जिसने समान नाम का उपयोग किया है। लेकिन यह चर्चा टिप्पणियों के लिए बहुत बड़ी है, इसलिए मैं इसे यहां छोड़ दूंगा।
जेसन एस

5

यह आपके द्वारा उपयोग किए जा रहे संपादक का हिस्सा है, वे अलग तरह से व्यवहार कर सकते हैं लेकिन तथ्य यह है कि विजुअल बेसिक वास्तव में केस-असंवेदनशील भाषा है। तो, ssऔर SSसमान हैं।

कृपया अधिक जानकारी के लिए VB.NET मूल बातें ट्यूटोरियल पर एक नज़र है :)


ओह दिलचस्प है। वहाँ कुछ जगह है मैं इस विस्तार को देखो? मैंने अभी तक परीक्षण नहीं किया है, लेकिन VBScript के बारे में सोचकर, आप सही हो सकते हैं।
टोड मेन

@Otaku: कृपया मेरा जवाब फिर से देखें मैंने अभी लिंक प्रदान किया है। धन्यवाद
सरफराज

मैं VB से काफी परिचित हूं, धन्यवाद :) मुझे यकीन नहीं है कि आप मुझे उस पृष्ठ पर देखना चाहते हैं।
टोड मुख्य

3

मुझे यकीन नहीं है कि मैं आपको समझता हूं? VB केस असंवेदनशील है, इसलिए ss और SS एक ही वेरिएबल है, इसलिए कंपाइलर सही ढंग से शिकायत करता है कि आपने वेरिएबल को फिर से घोषित कर दिया है।

मुझे लगता है कि वेरिएबल्स संवेदनशील नहीं हैं, लेकिन फ़ंक्शन नाम हैं।


लेकिन अगर मैं उपयोग करता हूं ssऔर फिर बाद में टाइप करता हूं SS, तो यह स्वतः पूर्ण हो जाता है ss, जो मुझे विश्वास दिलाता है कि संकलक वास्तव में मामले की परवाह करता है।
टोड मेन

5
@oTAKU: यह IDE केस को बदल रहा है, कंपाइलर को नहीं।
जॉन साउन्डर्स

2
VB अभी भी वास्तव में मामले की परवाह नहीं करता है। आईडीई कोड को साफ करने का प्रयास कर रहा है ताकि चर पूरे भर में समान रहें।
गिटारवादक

1

हां, VB केस असंवेदनशील है। यह कभी-कभी उन लोगों को फेंकता है जो इसे एक लूप के लिए उपयोग नहीं करते हैं।


1

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

इस तरह, कोई यह निर्धारित कर सकता है कि VB.NET ज्यादातर केस असंवेदनशील है, लेकिन यह पहचानकर्ताओं के मामले को CLR के लिए उपलब्ध कराता है जो केस-सेंसिटिव तरीकों से उस जानकारी का उपयोग कर सकता है।


1

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

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

इन लैंगग्यूज और IDE की उन्नति को देखते हुए, बेहतर सवाल यह है कि कौन सी भाषा मेरे देव समय को बेहतर बनाती है? बेशक यदि आप विभिन्न लंग्स में से प्रत्येक से परिचित नहीं हैं, तो आपके विकल्प सीमित हैं।


1

मैं आपके दूसरे प्रश्न का उत्तर देने की कोशिश करूंगा।

"क्या यह मेरे लिए काफी मजबूर करने वाला है कि मैं C # में जाने पर विचार करूं, अगर VB.NET मामला किसी तरह से सीमित है जो मैं कोड के साथ क्या कर सकता हूं?"

C # का उपयोग करके एक WCF WebService बनाएं। एक DataContract (1 Class) बनाएँ। एक "स्ट्रिंग ईमेल" संपत्ति के साथ। एक और संपत्ति के रूप में "स्ट्रिंग ईमेल" के साथ। आपकी पसंद व्यक्तिगत ईमेल या कार्यालय ईमेल के रूप में समझने के लिए। या यह दो अलग-अलग DataContracts में हो सकता है।

C # के लिए यह ठीक है। वेब सेवा ठीक बनाई गई है। एसी # प्रोग्राम आसानी से डब्ल्यूएसडीएल बना सकता है और सब कुछ ठीक है।

अब VB (किसी भी संस्करण) के साथ एक WSDL बनाने का प्रयास करें। यह कहेगा कि "ईमेल" पहले से ही घोषित है और डब्ल्यूएसडीएल पीढ़ी विफल है।

हर किसी की तरह मैंने माना कि यह वीबी भाषा में एक दोष है। परंतु!!!

FxCOP का उपयोग करें और मूल C # कोड का विश्लेषण करें। FxCOP का कहना है कि ईमेल / ईमेल का उपयोग करना एक मुद्दा है। विभिन्न नाम सहायक केस असंवेदनशीलता का उपयोग करने की अनुशंसा करता है। यह भी ध्यान रखें कि .NET .NET फ्रेमवर्क में 106 प्रोग्रामिंग लैंग्वेज हैं और कई भाषाओं में केस सेंसिटिविटी ऑन है। हम सभी क्लाउड की ओर बढ़ रहे हैं और चाहते हैं कि हमारी सेवाएं सभी प्रोग्रामिंग प्लेटफॉर्म / भाषाओं द्वारा सुलभ हों।

तो संवेदनशील होने के नाते आपके कार्यक्रम के भीतर आपकी पसंद है और यदि आप सी हैं तो आप इसे पसंद करेंगे। यदि प्रोग्राम का उपयोग किया जा रहा है / अन्य गैर सी कार्यक्रमों द्वारा पहुँचा जा सकता है तो आपको केस असंवेदनशीलता का समर्थन करने की आवश्यकता है लेकिन आपकी भाषा आपकी पसंद है।

http://en.wikipedia.org/wiki/Comparison_of_C_Sharp_and_Visual_Basic_.NET http://www.vbrad.com/article.aspx?id=65


क्लाउड यूआरआई का उपयोग करता है जो मामले के प्रति संवेदनशील होते हैं (जो विशेष रूप से प्रॉक्सी और कैश सर्वर के लिए महत्वपूर्ण हैं)।
बिंकी डे

1

प्रतीकों का छिपाना (उदाहरण के लिए स्थानीय खाल क्षेत्र) भी असंवेदनशील है।

यहाँ एक उदाहरण है :

Public Class C
    Public Name As String

    Public Function M(name As String) As Boolean
        Return String.Equals(name, Name) ' case differs
    End Function
End Class

VB.NET संकलक का आउटपुट निम्न C # के लिए विघटित होता है (और इसलिए समतुल्य होता है):

public class C
{
    public string Name;

    public bool M(string name)
    {
        return string.Equals(name, name); // both lowercase
    }
}

string.Equalsदो बार क्षेत्र पारित किया है। मामला चाहे जो भी हो, स्थानीय छिपा हुआ है। भाषा असंवेदनशील है।

किसी सदस्य को इस क्षेत्र के रूप में स्पष्ट रूप से संदर्भित करने के लिए, आपको सदस्य को इसके माध्यम से हटाना होगा Me:

Return String.Equals(name, Me.Name) ' differentiate field from local

0

मैंने अंत में किसी को भी आपके स्पष्ट 2 वें प्रश्न पर टिप्पणी करते नहीं देखा है: "2: क्या यह मेरे लिए काफी मजबूर करने वाला है कि मैं C # में जाने पर विचार करूं, अगर VB.NET मामला किसी तरह से सीमित है जो मैं कोड के साथ क्या कर सकता हूं?"

मैं अधिक विकल्प दृष्टिकोण को पसंद करता हूं जो कि C # प्रोग्रामर को यह चुनने देता है कि प्रोग्रामर के विकल्पों को सीमित करना है या नहीं। मैं C # को बहुत पसंद करता हूं, लेकिन अकेले केस सेंसिटिविटी के लिए, मैं इसे सिर्फ एक भाषा सीखने के करीब भी नहीं समझूंगा क्योंकि यह केस सेंसिटिव है। सभी विशेषताएं क्या मायने रखती हैं, और जब मैं दोनों के लाभों को देखता हूं, तो C # और VB.NET, मैं अत्यधिक C # पसंद करता हूं। लेकिन मैं आपको एक सच्चा संतुलित दृष्टिकोण दूंगा, हाँ, पक्षपाती, क्योंकि मेरे पास एक प्राथमिकता है, लेकिन मैं सी # के नुकसान के बारे में भी ईमानदार रहूंगा।

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

जब C # पहली बार सामने आया, VB के पास अपनी XML टिप्पणियां नहीं थीं, जिन्हें आप विधियों से पहले रख सकते थे, जो मुझे C # में पसंद थे। मुझे लगता है कि VB.NET में नफरत है। लेकिन मैंने वर्षों में देखा है कि कई विशेषताएं जो एक भाषा में नहीं हैं, वे दूसरे में जुड़ जाती हैं। (MS डेवलपर्स की एक ही टीम C # और VB दोनों को विकसित करती है, इसलिए यह समझ में आता है कि सुविधाएँ समान होनी चाहिए।)

लेकिन आपने पूछा कि C # में ऐसा क्या है जो VB नहीं करता है। यहाँ कुछ मैं तुरंत सोच सकता हूँ:

1: C # अधिक संक्षिप्त है और MANY तरीकों में कम टाइपिंग लेता है ..! मैंने यह भी देखा है कि जब विपरीत दावा किया जाता है, तो वह मूर्खतापूर्ण बात करता है, जो VB टाइपिंग बचाता है। लेकिन कृपया उन लोगों को सुनें जो आपको बताते हैं कि वे दोनों भाषाओं का उपयोग करते हैं, और न ही उनके द्वारा शायद ही कभी उपयोग किया जाता है। मैं C # और दोनों का उपयोग करता हूंVB, C # घर पर क्योंकि मुझे यह पसंद है (और जब मैं काम पर C # के साथ काम करता हूं), और मेरे अधिक हाल के जॉब रिक्वेस्ट कि मैं VB का उपयोग करता हूं और C # का नहीं। इसलिए मुझे अब (लगभग 10 महीने के लिए) वीबी का अधिक उपयोग मिल रहा है, लेकिन मेरी व्यक्तिगत गवाही में, मैं C # पसंद करता हूं, और वास्तविक टाइपिंग के मामले में, VB काफी अधिक टाइपिंग है। एक उदाहरण मैंने पढ़ा है जहां किसी ने वास्तव में वीबी को अधिक संक्षिप्त कहने की कोशिश की थी, साथ में एक लंबे चर के साथ एक 'के साथ ...' उदाहरण दे रहा था, इसलिए VB में, आप बस '.property' का उपयोग कर सकते थे। यह दावा करने में मूर्खता है कि वीबी को टाइपिंग कम चाहिए। कुछ चीजें हैं (और सिर्फ इस उदाहरण से नहीं) जहां वीबी कम है, लेकिन कई बार जब सी # अधिक संक्षिप्त होता है, तो वास्तविक अभ्यास में।

लेकिन सबसे बड़ा कारण मुझे लगता है कि C # अधिक संक्षिप्त है, VB की क्रिया "IF / THEN" कथन है। यदि कथन आम हैं। C # में टाइप करने के लिए कोई 'तब' शब्द नहीं है! :) सभी 'अंत ...' कथन भी टाइप करते हैं जो c # में होता है, आमतौर पर सिर्फ एक बंद ब्रेस '}' होता है। मैंने पढ़ा है कि कुछ लोग दावा करते हैं कि VB.NET में यह अधिक वाचालता VB के लिए एक फायदा है क्योंकि कई क्लोजिंग ब्लॉक स्टेटमेंट / सिंबल नेस्टेड हो सकते हैं और तुरंत एक दूसरे के बगल में समाप्त हो सकते हैं, लेकिन मैं काफी असहमत हूं। एक व्यक्ति किसी प्रोग्रामर की तुलना में लगभग हमेशा C # या VB में बेहतर प्रोग्राम लिख सकता है क्योंकि अगला कोड रिवीजन बेहतर तरीके से डिज़ाइन किया जा सकता है। यह 'सी #' में कई बंद ब्रेसेस को भ्रमित करने के लिए लागू होता है, अगर नेस्टेड ब्लॉक सभी समान प्रकार के होते हैं जैसे कि कई नेस्टेड आईएफ के तो वीबी उसी समस्या से ग्रस्त है जैसा कि सी # में है। यह वीबी में कोई फायदा नहीं है। यह स्थिति ठीक है कि मैं यह क्यों टिप्पणी करना पसंद करता हूं कि मेरा समापन प्रतीक या समापन कथन दोनों भाषाओं में है। हां, यह करने के लिए अधिक क्रिया है, लेकिन किसी भी भाषा में, आपके पास स्पष्ट होने का विकल्प है, जो निर्णय आधारित, स्थितिजन्य विशिष्ट मामलों में महत्वपूर्ण है। मुझे लगता है कि कोड स्पष्टता काफी महत्वपूर्ण है।

2: VB में मल्टी-लाइन टिप्पणियां नहीं हैं। जब मैंने VB के साथ काम किया तो मुझे कोई आपत्ति नहीं थी। तब मैं कुछ सी-शैली भाषाओं में गया। अब मैं वापस काम पर VB.NET का उपयोग कर रहा हूँ, और मैं उन्हें याद करता हूँ। यह सिर्फ कुछ है जो आप सुविधाजनक पाते हैं, और फिर खोना पड़ता है। :(

3: VB का al andalso ’और se orelse’ सभी को टाइप करने के लिए परेशान कर रहा है, जब C # में यह बस it && ’और '||’ है। फिर से, कम टाइपिंग। यह VB और C # दोनों में मेरे कोड में दुर्लभ नहीं है। यदि कुछ भी हो, तो कार्यक्षमता के लिए, 'OR' बनाम 'OrElse' आमतौर पर कंप्यूटर के लिए 'OrElse' को छोड़कर अधिक महत्वपूर्ण नहीं होता है, इसलिए यदि कोई प्रोग्रामर VB में 'Or' और 'And' का उपयोग करता है, तो यह कम इष्टतम कोड उत्पन्न करता है कोई है जो कोड की स्पष्टता पसंद करता है। 'OrElse' की तुलना में 'Or' को स्किम करना कहीं ज्यादा आसान है।

4: C # में कोड प्लेसमेंट में अधिक लचीलापन। जब कोई रेखा लंबी होती है और आप उसे अगली पंक्ति में लपेटना चाहते हैं, तो मुझे मेरे कोड के VB.NET के 'कंट्रोलिंग' रीडिंग से नफरत है। C # इसे थोड़ा करता है, लेकिन मुझे यह C # में अधिक उपयोगी लगता है, जहां VB में, यह बहुत अधिक नियंत्रित है। लेकिन यह भाषा के बजाय VB.NET IDE बनाम C # IDE का अधिक है। लेकिन मुझे नहीं पता कि आप दोनों या विशुद्ध रूप से IDE के अंतर के बिना भाषा सुविधाएँ चाहते हैं।

5: एक मैं वास्तव में याद कर रहा हूँ C # में कोड का एक नया ब्लॉक बना रहा है, मेरे पास एक विधि में बहुत कुछ हो सकता है और मैं कोड के एक बहुत छोटे ब्लॉक में एक चर घोषित करना चाहता हूं, लेकिन उस ब्लॉक के बाहर घोषित चर नहीं है पूरी विधि। C # में, हम केवल '{' के साथ एक नया ब्लॉक बना सकते हैं और इसे '}' के साथ समाप्त कर सकते हैं। VB में ऐसी कोई विशेषता नहीं है, लेकिन यह निकटतम मैच एक बिना शर्त 'इफ ट्रू तो' और 'एंड इफ' ब्लॉक है। (नोट 2 वर्ण C # बनाम 18 वर्ण VB.NET फिर से समतुल्य ... VB में अधिक टाइपिंग।)

6: स्वयं वेतन वृद्धि और घटती ऑपरेटरों: ++ और - के रूप में myVariable++या ++myVariableया समकक्ष घटती संस्करणों। यह बहुत काम आता है ... कभी-कभी। यहाँ वास्तविक कोड का एक उदाहरण है जब मैंने C # बहुत याद किया:

// C#:
while (txt.Length > x)
{
    thisChar = txt[x];
    if (charsAllowedWithoutLimit.Contains(thisChar)) { ++x; }
    else if (allowLettersWithoutLimit && char.IsLetter(thisChar)) { ++x; }
    else if ((x2 = charsAllowedWithLimit.IndexOf(thisChar)) >= 0)
    {
        ++x; if (++usedCountA[x2] > charAllowedLimit[x2]) { break; }
    }
    else { break; }
}

' VB.NET:
While (txt.Length > x)
    thisChar = txt(x)
    If (charsAllowedWithoutLimit.Contains(thisChar)) Then
        x += 1
    ElseIf (allowLettersWithoutLimit AndAlso Char.IsLetter(thisChar)) Then
        x += 1
    Else
        x2 = charsAllowedWithLimit.IndexOf(thisChar)
        If (x2 >= 0) Then
            x += 1
            usedCountA(x2) += 1S
            If usedCountA(x2) > charAllowedLimit(x2) Then Exit While
        Else
            Exit While
        End If
    End If
End While

और सिर्फ एक बहुत अच्छा उदाहरण देने के लिए जहां C # नियम, यह अधिक कोड है जो मैंने हाल ही में व्यक्तिगत रूप से लिखा है:

// C#
public static bool IsNotWithin(this Byte   v, Byte   v1, Byte   v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this SByte  v, SByte  v1, SByte  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int16  v, Int16  v1, Int16  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int32  v, Int32  v1, Int32  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Int64  v, Int64  v1, Int64  v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt16 v, UInt16 v1, UInt16 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt32 v, UInt32 v1, UInt32 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this UInt64 v, UInt64 v1, UInt64 v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }
public static bool IsNotWithin(this Decimal v, Decimal v1, Decimal v2) { return (v1 > v && v < v2) || (v2 < v && v > v1); }

public static bool IsWithin(this Byte   v, Byte   v1, Byte   v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this SByte  v, SByte  v1, SByte  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int16  v, Int16  v1, Int16  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int32  v, Int32  v1, Int32  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Int64  v, Int64  v1, Int64  v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt16 v, UInt16 v1, UInt16 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt32 v, UInt32 v1, UInt32 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this UInt64 v, UInt64 v1, UInt64 v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }
public static bool IsWithin(this Decimal v, Decimal v1, Decimal v2) { return (v1 <= v && v <= v2) || (v2 <= v && v <= v1); }

' And the VB equivalent is a mess! Here goes:
<Extension()>
Public Function IsNotWithin(v As Byte, value1 As Byte, value2 As Byte) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As SByte, value1 As SByte, value2 As SByte) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As Int16, value1 As Int16, value2 As Int16) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the % suffix means 'As Integer' in VB.
<Extension()>
Public Function IsNotWithin(v%, value1%, value2%) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the & suffix means 'As Long' in VB.
<Extension()>
Public Function IsNotWithin(v&, value1&, value2&) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt16, value1 As UInt16, value2 As UInt16) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt32, value1 As UInt32, value2 As UInt32) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsNotWithin(v As UInt64, value1 As UInt64, value2 As UInt64) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

' the @ suffix means 'As Decimal' in VB.
<Extension()>
Public Function IsNotWithin(v@, value1@, value2@) As Boolean
    Return (value1 > v AndAlso v < value2) OrElse (value2 < v AndAlso v > value1)
End Function

<Extension()>
Public Function IsWithin(v As Byte, value1 As Byte, value2 As Byte) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As SByte, value1 As SByte, value2 As SByte) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As Int16, value1 As Int16, value2 As Int16) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the % suffix means 'As Integer' in VB.
<Extension()>
Public Function IsWithin(v%, value1%, value2%) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the & suffix means 'As Long' in VB.
<Extension()>
Public Function IsWithin(v&, value1&, value2&) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt16, value1 As UInt16, value2 As UInt16) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt32, value1 As UInt32, value2 As UInt32) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

<Extension()>
Public Function IsWithin(v As UInt64, value1 As UInt64, value2 As UInt64) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

' the @ suffix means 'As Decimal' in VB.
<Extension()>
Public Function IsWithin(v@, value1@, value2@) As Boolean
    Return (value1 <= v AndAlso v <= value2) OrElse (value2 <= v AndAlso v <= value1)
End Function

शायद यह स्पष्ट प्रमाण है कि C # अधिक संक्षिप्त है। लेकिन सभी प्रोग्रामर को सुरीला नहीं लगता। कुछ लोग "यदि ए <बी तो ..." पढ़ना पसंद करते हैं क्योंकि यह उनकी मानव भाषा के लिए अधिक स्वाभाविक है। और यह ठीक है। प्राथमिकताएँ ठीक हैं। मेरे लिए, हाथ का प्रयास एक कारक मैं मूल्य है, और मुझे लगता है कि किसी को भी "पसंद" और "तब" के लिए किसी भी प्रतीकों में सोचने के लिए इस्तेमाल किया जा सकता है, और सी # के "अगर" (स्थिति) बयान हैं; " वाक्यविन्यास भी प्रतीक हैं। एक दूसरे की तुलना में गैर-प्रोग्रामर के सिंटैक्स के करीब है। मैं संक्षिप्त पसंद करते हैं।

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

निष्पक्ष होने के लिए, मैं कहूंगा कि वीबी जैसे फायदे हैं जैसे मैं विधि कॉल के बाद खाली कोष्ठक नहीं डाल सकता हूं, जैसे Dim nameUpper$ = name.ToUpperInvariantकि सी # को खाली कोष्ठक की आवश्यकता होती है string nameUpper = name.ToUpperInvariant():। या यह ट्रिमिंग की तरह डबल भी: Dim nameUpper$ = name.Trim.ToUpperInvariantबनाम string nameUpper = name.Trim().ToUpperInvariant()। मैं VB के संक्षिप्त उपयोग को पसंद करता हूं कि कैसे मैंने $ऊपर प्रयोग किया है इसे 'ऐस स्ट्रिंग' के रूप में जहां C # में उन शॉर्टकट नहीं हैं। VB में स्ट्रिंग, इंटेगर, लॉन्ग, डेसीमल, सिंगल और डबल टाइप के शॉर्टकट हैं, लेकिन नुकसान यह है कि यह कम स्पष्ट है, इसलिए मैं सावधानी के साथ इसका उपयोग करता हूं। लेकिन फिर भी, मैं संक्षिप्त कोड पसंद करता हूं।

ठीक है, कि इस अनुभवी प्रोग्रामर से सिर्फ कुछ थॉट्स हैं, और जैसा कि मैं समझता हूं, यह मेरी प्रोग्रामिंग 'सी # बनाम वीबी' की गवाही है। दोनों मेरी राय में, अच्छी भाषाएं हैं। लेकिन हां, मैं अभी भी C # पसंद करता हूं।

चूंकि मैं अपने जीवन के अधिकांश समय के लिए कार्यक्रम करने की योजना बना रहा हूं, इसलिए मैंने सबसे कुशल कीबोर्ड का उपयोग करके टाइप करना भी सीखा: ड्वोरक कीबोर्ड, जो कि क्वर्टी कीबोर्ड की तुलना में अंग्रेजी टाइप करने के लिए लगभग 1/3 प्रयास करता है। इसे देखो। शायद तुम भी स्विच करना चाहते हो सकता है। ;) यह मेरी टाइपिंग 67% आसान बना दिया! :) मैं किसी को भी बॉक्स के बाहर सोचने और आपके काम में बेहतर दक्षता का मूल्यांकन करने के लिए प्रोत्साहित करता हूं। Dvorak सरलीकृत कीबोर्ड लेआउट और C # ने मेरे लिए यह किया है। :)

PSS i, क्वेर्टी कीबोर्ड लेआउट और VB से Empirir माप के विपरीत Dvorak और C # की तुलना मीट्रिक से करेगा। ड्वोरक, मीट्रिक और सी # सिर्फ 'साफ' हैं। लेकिन वीबी वास्तव में बहुत पीछे नहीं है। लेकिन यह पुराने VB6 कोड और '.NET' बनाम 'OrElse', और 'IIF ()' जैसे पुराने VB6 कोड के पिछड़े संगत होने की आवश्यकता से ग्रस्त है।

मैं एक सावधानी के साथ समाप्त करता हूं। कृपया अधिक विवेकपूर्ण रहें कि उन लोगों को सुनना जो वास्तव में नहीं जानते कि वे किस बारे में बात कर रहे हैं। VB और C # दोनों के खिलाफ सभी विपक्ष में से आधे हैं नहीं हैंअब कोई भी मुद्दा नहीं है, और लोग अभी भी उनके बारे में अनभिज्ञ हैं जो इस बात से अनभिज्ञ हैं कि भाषा में अभी भी क्या नुकसान मौजूद हैं। सबसे अच्छा उदाहरण मैं सोच सकता हूं कि VB में ट्रिपल एपोस्ट्रोफ या C # में ट्रिपल स्लेश टिप्पणी प्रतीकों का उपयोग करने के तरीकों के लिए XML टिप्पणियां हैं। लेकिन कृपया अपने लिए विचार करें कि क्या कोई व्यक्ति अज्ञानता से बोल रहा है, या अनुभव से। व्यक्तिगत गवाही का मतलब है कि वे अपने वास्तविक अनुभव से जानते हैं। और जब किसी को इसमें बहुत अनुभव होता है, तो अपने कानों को ऊपर उठाएं। मुझे C # और VB दोनों में 10 से अधिक वर्षों का अनुभव है। और यह इस पर उबलता है: दोनों (बहुत) अच्छी भाषाएं हैं। और अधिकांश अंतर, आप कोड पढ़ने के 5 मिनट के भीतर तुरंत देख सकते हैं। लेकिन हां, अन्य विशेषताओं में एक बाधा खोजने में कई साल लग सकते हैं। और एक बाधा जो मुझे पता है (सी # में), मैं कर सकता हूं ' टी भी एक वास्तविक जीवन की स्थिति के बारे में सोचो जहां यह उपयोगी होगा। तो शायद यह एक बाधा नहीं है सब के बाद।

हैप्पी कोडिंग!


मैं सभी विवरणों की सराहना करता हूं, लेकिन आपका उदाहरण केस संवेदनशीलता / असंवेदनशीलता (जहां तक ​​मैं बता सकता था) का उपयोग यह दिखाने के लिए नहीं करता कि C # किसी भी तरह "बेहतर" क्यों है।
टॉड मेन

मैंने प्रत्यक्ष उदाहरण के साथ दूसरे प्रश्न का उत्तर देने का प्रयास किया।
वेंकट

@ToddMain, सही है। और मेरा उदाहरण यह दिखाने के लिए केस सेंसिटिविटी का उपयोग नहीं करता कि C # क्यों बेहतर है क्योंकि सवाल यह नहीं पूछता कि केस सेंसिटिविटी इसे बेहतर क्यों बनाती है। इसके अलावा मेरा मानना ​​है कि यह फीचर अपने लिए बोलता है। और मेरा मानना ​​है कि तर्क मूल रूप से स्पष्ट है कि अधिकांश लोग स्वयं को ही काट सकते हैं। लेकिन अगर कोई पूछता है, तो मुझे तर्क को समझने में मदद करने में खुशी होती है। लेकिन वह, मेरे दोस्त, मेरी राय में, एक अलग सवाल है। ;)
शॉन कोवाक

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

@ToddMain, मैं आपकी बात देखता हूं। वास्तव में बहुत उचित बिंदु। :) इस के लिए मेरी आँखें खोलने के लिए धन्यवाद। :)
शॉन कोवाक

0

VB.NET केस-इनसेंसिटिव है।

उदाहरण:

1।

Dim a As Integer
Dim A as Integer

2।

Sub b()
    'Some statement(s) here
End Sub
Sub B()
    'Some statement(s) here
End Sub

3।

Function c() As Integer
    'Some statement(s) here
End Function
Function C() As Integer
    'Some statement(s) here
End Function

ये सभी कोड एक COMPILE-TIME ERROR को फेंक देंगे ।

1 उदाहरण के लिए, त्रुटि दिखाई जाएगी, यह कहते हुए कि "स्थानीय चर 'ए' पहले से ही वर्तमान ब्लॉक में घोषित किया गया है।"

2 और 3 उदाहरण के लिए, त्रुटि को यह कहते हुए दिखाया जाएगा कि "सार्वजनिक उप ख () 'में समान हस्ताक्षर वाली कई परिभाषाएं हैं।" और "पब्लिक फंक्शन सी () इंटेगर के रूप में समान हस्ताक्षर वाले कई परिभाषाएं हैं।", क्रमशः।

इन त्रुटियों से, ध्यान दें कि त्रुटियों को चर और प्रक्रियाओं / कार्यों के लिए विभिन्न पदों पर फेंक दिया जाता है। चरों के लिए, त्रुटि को 2 डी घोषणा पर फेंक दिया जाता है, जबकि प्रक्रियाओं / कार्यों के लिए इसे समान कोड की पहली घोषणा / परिभाषा में फेंक दिया जाता है।

जैसा कि ऊपर एक टिप्पणी में एक उपयोगकर्ता द्वारा कहा गया है, VB.NET कोड लगातार जाँच की जाती है और / या पृष्ठभूमि में सही है; आप इस त्रुटि को "त्रुटि सूची" विंडो में VS IDE में देख सकते हैं। और जैसा कि यह एक त्रुटि है और एक चेतावनी नहीं है , कोड तब तक संकलित नहीं होगा जब तक कि त्रुटि हल नहीं हो जाती।

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