मैंने अंत में किसी को भी आपके स्पष्ट 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 मिनट के भीतर तुरंत देख सकते हैं। लेकिन हां, अन्य विशेषताओं में एक बाधा खोजने में कई साल लग सकते हैं। और एक बाधा जो मुझे पता है (सी # में), मैं कर सकता हूं ' टी भी एक वास्तविक जीवन की स्थिति के बारे में सोचो जहां यह उपयोगी होगा। तो शायद यह एक बाधा नहीं है सब के बाद।
हैप्पी कोडिंग!