2008-08-29 17 views
7

अधिकांश समय हम अवधारणाओं जो कम से कम 0. उदाहरण लंबाई की घोषणा करने के लिए कभी नहीं हो सकता प्रतिनिधित्व करते हैं, हम लिख:अहस्ताक्षरित आदिम प्रकार का उपयोग करना

int length; 

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

uint length; 

कुछ नुकसान है कि मैं के बारे में सोच सकते हैं:

  • अहस्ताक्षरित प्रकार (uint, Ulong, ushort) शिकायत CLS नहीं कर रहे हैं तो आप अन्य भाषाओं के साथ उपयोग नहीं कर सकते का समर्थन नहीं करते कि इस
  • नेट वर्गों पर हस्ताक्षर किए प्रकार समय के सबसे अधिक उपयोग करें ताकि आप कास्ट करने के लिए है

विचार?

उत्तर

5

जबकि वहाँ सैद्धांतिक रूप से अहस्ताक्षरित मूल्यों जहां लागू हो, क्योंकि यह कोड अधिक अर्थपूर्ण बनाता है का उपयोग करने में एक फायदा है, यह बस सी # में नहीं किया जाता है "रोम में है, के रूप में रोमन करते हैं।"। मुझे यकीन नहीं है कि शुरुआत में डेवलपर्स ने uints को संभालने के लिए इंटरफेस को डिजाइन क्यों नहीं किया और सीएलएस को अनुपालन करने के लिए टाइप किया लेकिन अब ट्रेन ने स्टेशन छोड़ दिया है।

चूंकि स्थिरता आम तौर पर महत्वपूर्ण है क्योंकि मैं सी # रोड लेने और int एस का उपयोग करने की सलाह दूंगा।

5

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

5

आपका दूसरा बिंदु सबसे महत्वपूर्ण है। आम तौर पर आपको केवल int का उपयोग करना चाहिए क्योंकि यह पूर्णांक मानों के लिए एक बहुत अच्छा "पकड़-सब" है। मैं केवल uint का प्रयोग करेंगे, तो आप पूरी तरह int की तुलना में अधिक भरोसा करने की क्षमता की जरूरत है, लेकिन अतिरिक्त स्मृति का उपयोग किए बिना long की आवश्यकता है (यह बहुत अधिक स्मृति नहीं है, इतना सस्ता :-P होना नहीं है)।

2

मुझे लगता है कि यूंट बनाम int का सूक्ष्म उपयोग डेवलपर्स के साथ भ्रमित हो जाएगा जब तक कि यह कंपनी के लिए डेवलपर दिशानिर्देशों में लिखा गया न हो।

लंबाई हैं, उदाहरण के लिए, नहीं शून्य से भी कम समय तो यह व्यापार तर्क ताकि भविष्य डेवलपर्स कोड पढ़ सकते हैं और सच्चे इरादे पता कर सकते हैं में स्पष्ट रूप से व्यक्त किया जाना चाहिए हो सकता है।

बस मेरे 2 सेंट।

2

मैं बताउंगा कि सी # में आप अंकगणित अतिप्रवाह/अंडरफ्लो की जांच के लिए /checked चालू कर सकते हैं, जो कि किसी भी तरह का बुरा विचार नहीं है। यदि किसी महत्वपूर्ण अनुभाग में प्रदर्शन महत्वपूर्ण है, तो आप इससे बचने के लिए अभी भी unchecked का उपयोग कर सकते हैं।

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

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

0

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

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