2009-06-09 15 views
5

.NET फ़ील्ड्स और गुणों के लिए परिभाषा के अनुसार केवल एक वर्ण होता है, क्या स्ट्रिंग के बजाय उन्हें चार के रूप में परिभाषित करने का कोई लाभ होता है? या यह है कि चार डेटा प्रकार का गलत उपयोग?क्या सिंगल-कैरेक्टर वैल्यू के लिए स्ट्रिंग के बजाय char का उपयोग करने का कोई फायदा है?

मैं ऐसे क्षेत्र के बारे में सोच रहा हूं जो सेक्स के लिए एम या एफ पकड़ सकता है, या मध्य प्रारंभिक, या डेटाबेस में संग्रहीत एक संकेतक वाई या एन के रूप में। मैं आमतौर पर इन्हें स्ट्रिंग के रूप में परिभाषित करता हूं, लेकिन मैं हूं यह सोचकर कि मुझे उन्हें चार के रूप में परिभाषित करना चाहिए या नहीं।

+1

(पूरी तरह से स्पर्शशील, लेकिन एक सुझाव के रूप में, मैं एक बूलियन के रूप में लिंग को संग्रहित करने से बचूंगा - यह लिंगदर्शी, अंतरंग, और ट्रांसजेंडर लोगों के लिए अनजान है।) –

+0

@ कॉनराड, कृपया प्रश्न को दोबारा पढ़ें। मैंने तीन अलग-अलग उदाहरण दिए: (1) लिंग (लिंग नहीं, बल्कि जैविक अर्थ में सेक्स), जो या तो एम या एफ हो सकता है; (2) मध्य प्रारंभिक, जो कोई भी पत्र हो सकता है; और (3) एक अनिर्धारित संकेतक, जो या तो वाई या एन हो सकता है। मेरे प्रश्न में लिंग पहचान से कोई लेना देना नहीं था। –

+0

@ जॉन: पुन: (1): आप अभी भी जैविक रूप से अंतरंग लोगों को छोड़ रहे हैं। पुन: बाकी: हां, यही कारण है कि मैंने कहा कि यह टेंगेंशियल था। –

उत्तर

12

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

इसे किसी अन्य कोण से मानने के लिए: जब कोड में एक पूर्णांक मान का उपयोग करना चाहते हैं, तो क्या आप आकार का एक पूर्णांक सरणी बनाते हैं? बेशक नहीं, क्योंकि यह नौकरी करेगा, यह काफी अनावश्यक है। अर्थात की तुलना करें:

int[] value = new int[1] { 123 }; 
value[0] = 456; 

रहे हैं:

int value = 123; 
value = 456; 

पहले, सरल बेतुका है, क्योंकि मुझे यकीन है कि आप देख रहा हूँ। निश्चित रूप से, यह डेटाबेस के संदर्भ में इतना स्पष्ट नहीं है (यदि आप string डेटा प्रकार चुनते हैं तो उपयोग सरल है), लेकिन मुझे लगता है कि समानता पसंद के पीछे तर्क को समझाने में मदद करती है।

इसके अलावा, जब कोड में मानों में हेरफेर करने की बात आती है, तो आपको यह पता होना चाहिए कि अधिक एप्राइपिएट डेटा प्रकार (यानी char) में फ़ील्ड होने से कोड में ऐप्रोपीली का उपयोग करने के लिए थोड़ा और सरल हो जाता है।

प्रदर्शन के संदर्भ में, मुझे कल्पना नहीं होगी कि string का उपयोग करके आप कोई महत्वपूर्ण ओवरहेड देंगे। ठीक है, तो यह मामूली अधिक मेमोरी लेता है, लेकिन शायद यह कोई मुद्दा नहीं है। हालांकि मुझे लगता है कि अन्य कारणों से मैंने अभी प्रस्ताव दिया है कि आप char चुनना चाहिए।

+0

अमान्य डेटा के बारे में अच्छी बात जो मैंने अपने उत्तर में शामिल नहीं की थी। – TheTXI

+2

हाँ, वास्तव में यहां दो मुख्य कारण हैं: अमान्य डेटा के विरुद्ध प्रतिबंध और सुरक्षा। – Noldorin

2

स्ट्रिंग्स वर्णों के सरणी हैं, इसलिए जब तक आपको विश्वास न हो कि आपको सरणी (जैसे लंबाई, और सबस्ट्रिंग फ़ंक्शंस) के साथ आने वाले गुणों/विधियों की आवश्यकता हो सकती है, तो मैं एक चरित्र के साथ चिपकूँगा, क्योंकि आप निश्चित हैं कि यह है केवल एक चरित्र

4

Char और 1 वर्ण String अधिक प्रदर्शन करने के लिए नहीं जा रहे हैं। सीएलआर आपके लिए तारों को प्रशिक्षित करेगा ताकि विचार करने के लिए कुछ ऐसा हो (लेकिन फिर मैं कल्पना नहीं कर सकता कि प्रदर्शन लाभ महत्वपूर्ण होंगे)।

याद रखें कि एक प्रोग्रामिंग भाषा अस्थिरता के रूप में उपयोगी उपकरण है। हमेशा उपयोगी abstractions बनाएँ। दूसरे शब्दों में मैं इस तरह अपने क्षेत्रों को परिभाषित करेगा: क्योंकि डेटाटाइप्स उनके उपयोग से संकेत मिलता है

enum Gender { Male, Female } 

class Foo 
{ 
    Gender gender; 
    Char middleInitial; 
    Boolean indicator; 
} 

इस वर्ग अब शब्दार्थ मूल्यवान है। हमेशा नौकरी के लिए सही उपकरण का उपयोग करें।

+0

अपने enum उदाहरण के साथ सहमत हैं। यह निश्चित रूप से एक एकल से अधिक स्पष्ट है। – Skurmedel

+1

वही टिप्पणी यहां जाती है (ओपी के मुकाबले कहीं भी ज्यादा) - बाइनरी लिंग क्षेत्र लैंगिकता, अंतरंग, और ट्रांसजेंडर लोगों के लिए असभ्य हैं। कृपया इसे कायम न करें। धन्यवाद! =) –

1

स्ट्रिंग क्लास में कुछ ओवरहेड होगा। यदि आपके पास char है, तो आपको 0x00 या <space> या किसी अन्य अज्ञात संकेतक के साथ खाली प्रतिनिधित्व करने की आवश्यकता होगी?क्या यह डेटाबेस से आने या आने वाला होगा, और आप वहां किस सम्मेलन का उपयोग करने जा रहे हैं?

मैं आम तौर पर इसके लिए आवेदन परत में enums/bools/मूल अर्थशास्त्र पसंद करता हूं, अनुवाद करने के लिए और जो भी डेटाबेस सम्मेलन की आवश्यकता है। सभी Person.Gender == Female और if (!Person.IsDeceased) {} के बाद बहुत अधिक पठनीय और स्पष्ट है।

+0

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

+0

ने मेरी व्यक्तिगत डिजाइन वरीयता के बारे में नोट जोड़ा, जो अनुरू हरे के बिंदु के समान है। –

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

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