वीबी 6 प्रोग्रामर के लिए विकल्प सख्त ऑन और.NET




vb.net late-binding (6)

मैं Visual Basic 2005 पर एक क्लास तैयार कर रहा हूं जो .NET प्लेटफॉर्म पर माइग्रेट करने वाले विजुअल बेसिक 6 प्रोग्रामर को लक्षित करता है।

मैं हमेशा सलाह देता हूं कि उन्हें हमेशा विकल्प सख्त सक्षम करने के लिए अनुशंसा करना है या नहीं।

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

इस बात को ध्यान में रखते हुए, किसी को जो वीबीएनईटी का उपयोग करते हुए पहली बार .NET के पास आ रहा है और वीबी 6 पृष्ठभूमि के साथ संकलन-समय प्रकार की जांच के साथ काम करने की मानसिकता में शामिल होने के लिए प्रोत्साहित किया जाना चाहिए क्योंकि यह "सर्वोत्तम अभ्यास" है सीएलआर? या देर से बाध्यकारी के लाभों का आनंद लेना जारी रखने के लिए यह "ठीक" है?


बोहेम की धारणा को देखते हुए कि विकास चक्र में पहले किसी समस्या को ठीक करने से कम से कम संसाधनों का उपभोग होता है, मैं हर उपकरण का प्रशंसक हूं जो डेवलपर्स को जितनी जल्दी हो सके "इसे सही" प्राप्त करने में मदद करता है। इस कारण से, मैं IntelliSense जैसी चीजों का समर्थक हूं जो एक दक्षता बढ़ावा देने के साथ-साथ एक उपकरण है जो आपको चक्र में पहले कोडिंग कोड को लागू करने में मदद करता है। (काम करना, लेकिन जरूरी नहीं है ।)

इस कारण से, मैं विकल्प सख्त के उपयोग को गलत तरीके से रखने में मदद करने के लिए और "डिजाइन समय" में गहराई से सुधार करने में मदद करता हूं।


मैं आरएस Conley (बहुत असामान्य) के साथ असहमत होने जा रहा हूँ। मेरे पसंदीदा वीबी 6 गुरु - फ्रांसेस्को बालेना, दान एप्पलमैन - सभी नापसंद वीबी 6 के स्वचालित रूपांतरण, और .NET में Option Strict favour में हैं। कई अनुभवी वीबी 6 प्रोग्रामर स्वचालित रूपांतरण को "बुरा प्रकार का दबाव" ( pdf ) के रूप में जानते हैं, और Option Strict पर स्विच करने में प्रसन्न होंगे।

बहुत से जटिल प्रतिबिंब कोड से बचने के लिए Option Strict बिना एक छोटे मॉड्यूल का उपयोग करना कभी-कभी बेहतर होता है। लेकिन यह अपवाद है जो नियम साबित करता है।


याद रखें कि यहां दो स्तर हैं।

विकल्प स्पष्ट विकल्प सख्त

दोनों के बीच मुख्य अंतर यह है कि विकल्प सख्त अक्षम विभिन्न डेटा प्रकारों के वीबी के स्वचालित रूपांतरण को अक्षम करता है। वैरिएबल को दूसरे प्रकार में असाइन करने के लिए आपको स्पष्ट रूप से सीटीपी या अन्य डेटा रूपांतरण फ़ंक्शन का उपयोग करना होगा।

मैं 1.0 के बाद से वीबी का उपयोग कर रहा हूं और जब मैं इस बिंदु को देख सकता हूं तो मुझे लगता है कि विभिन्न इंटरफेस और कक्षाओं को लागू या विरासत में रखने वाले ऑब्जेक्ट्स से निपटने पर सख्त उत्साहजनक रूप से ज़्यादा उत्साहित है।

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

वीबी के साथ वर्षों में मैं सभी फ्लोटिंग पॉइंट चर के लिए बहुत अधिक उपयोग करता हूं। इस तरह आप गोल करने और सटीकता के नुकसान के साथ कई समस्याओं से बचें। वीबी 6 में मैंने लंबे समय तक उपयोग किया क्योंकि यह 32-बिट पूर्णांक था, लेकिन इंटीजर काम भी .NET में काम करता है क्योंकि यह एक इंट 32 है। माइक्रोसॉफ्ट ने कभी भी उन खोजशब्दों को फिर से परिभाषित करने का फैसला किया है, तो मैं इंटीजर, लांग इत्यादि के बजाय इंट 32, इंटेल 16 इत्यादि का उपयोग करने की सलाह भी देता हूं।


विकल्प सख्त सक्षम के साथ विकास करने में व्यतीत समय आपको बाद में डीबगिंग समय की जबरदस्त राशि बचाएगा।


Option Strict स्पष्ट रूप से अच्छी इकाई परीक्षण को प्रतिस्थापित नहीं कर सकता - लेकिन न तो दूसरा रास्ता। जबकि यूनिट परीक्षण Option Strict रूप में एक ही त्रुटियों का पता लगा सकता है , इसका मतलब है कि यूनिट परीक्षणों में कोई त्रुटि नहीं है, कि इकाई परीक्षण अक्सर और जल्दी किया जाता है, आदि ...।

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

इसे समेटने के लिए, इस बात की कोई गारंटी नहीं है कि आपके यूनिट परीक्षण सही हैं। दूसरी तरफ, एक मजबूत गारंटी है कि कंपाइलर द्वारा किए गए प्रकार की जांच सही है या कम से कम इसकी ग्लिच (अनचेक सरणी कॉन्वर्सिस, सर्कुलर संदर्भों वाली बग ...) अच्छी तरह से ज्ञात और अच्छी तरह से प्रलेखित हैं।

एक और योग-अप: हां, Option Strict On निश्चित रूप से सर्वोत्तम अभ्यास है। असल में, मैंने इस तरह के ऑनलाइन समुदायों में वर्षों से काम किया है। जब भी किसी को उस कोड पर मदद की ज़रूरत होती है जिसमें स्पष्ट रूप से Option Strict सक्षम नहीं होता है, तो हम विनम्रतापूर्वक इसे इंगित करेंगे और इसे ठीक होने तक आगे की सहायता देने से इनकार कर देंगे। यह इतना समय बचाता है। अक्सर, इसके बाद समस्या चली गई। HTML समर्थन फ़ोरम में सहायता मांगते समय यह सही HTML का उपयोग करने के समान कुछ है: अवैध HTML काम कर सकता है, लेकिन फिर, यह समस्या का कारण नहीं हो सकता है। इसलिए, कई पेशेवर मदद करने से इनकार करते हैं।


हाँ! विकल्प सख्त निश्चित रूप से नेट के साथ सबसे अच्छा अभ्यास है। इस बात पर जोर दें कि नेट इसके मूल रूप से दृढ़ता से टाइप किए गए प्लेटफॉर्म पर है, और तब तक होगा जब तक डीएलआर अधिक पूर्ण रूप से समर्थित न हो। कुछ अपवादों के साथ, प्रत्येक Dim और Function साथ जाने के लिए घोषित एक स्पष्ट प्रकार होना चाहिए। LINQ या बू और जेस्क्रिप्ट जैसी चीजें अपवाद हैं जो नियम साबित करती हैं।

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

  • पुराने स्ट्रिंग फ़ंक्शंस का उपयोग न करें: LEN() , REPLACE() , TRIM() , आदि
  • हंगेरियन मौसा अब अनुशंसित नहीं हैं। oMyObject और sMyString कोशेर नहीं हैं। उन्हें माइक्रोसॉफ्ट के डिजाइन दिशानिर्देशों में संदर्भ दिखाएं यदि वे आपको विश्वास नहीं करते हैं।
  • सुनिश्चित करें कि वे नए AndAlso / OrElse लॉजिकल ऑपरेटरों के बारे में AndAlso
  • पैरामीटर प्रश्न और आधुनिक ADO.Net। पर्याप्त जोर नहीं दे सकते हैं। उन्हें फिर से CreateObject() को कॉल करने की आवश्यकता नहीं है।
  • स्कोप अलग-अलग काम करता है (और अधिक महत्वपूर्ण है) .NET में यह वीबी 6 में था। वीबी.Net में अभी भी मॉड्यूल हैं, लेकिन वे अब एक स्थिर वर्ग के समान हैं। वीबी 6 द्वारा प्रदान किए गए आंशिक ओओपी समर्थन के विपरीत, वास्तविक वस्तु उन्मुख वातावरण में विकास कैसे करना महत्वपूर्ण है, यह समझना महत्वपूर्ण है। विधियों को अजीब लंबाई तक चलाने की अनुमति देने के लिए अब कोई अच्छा कारण नहीं है।
  • सुनिश्चित करें कि वे जेनेरिक और इंटरफेस ( IEnumeralbe(Of T) सहित IEnumeralbe(Of T) लिए एक परिचय प्राप्त करते हैं, और जानें कि उन्हें कभी भी ArrayList उपयोग क्यों नहीं करना चाहिए।

मैं जा रहा था, लेकिन मैं आपको इस रान को बंद करने के लिए VB.Net प्रश्न की छिपी हुई विशेषताओं को इंगित करूंगा।





late-binding