ठीक है, तो यह वास्तव में एक शैतान अधिवक्ता सवाल का एक सा है।
जब वैश्विक चर ठीक हैं, और यदि कभी नहीं, तो आप विकल्प के रूप में क्या उपयोग करेंगे?
इस सवाल का एक दिलचस्प पक्ष यह है कि, एक सार्वजनिक स्थैतिक वर्ग क्षेत्र वैश्विक से अलग कैसे है?
ठीक है, तो यह वास्तव में एक शैतान अधिवक्ता सवाल का एक सा है।
जब वैश्विक चर ठीक हैं, और यदि कभी नहीं, तो आप विकल्प के रूप में क्या उपयोग करेंगे?
इस सवाल का एक दिलचस्प पक्ष यह है कि, एक सार्वजनिक स्थैतिक वर्ग क्षेत्र वैश्विक से अलग कैसे है?
जवाबों:
जहां तक मुझे पता है, एक सार्वजनिक स्थैतिक क्षेत्र मूल रूप से एक वैश्विक दिया गया है कि इसे अपवाद के साथ कहीं से भी बुलाया जा सकता है कि यह नाम स्थान पर नहीं चढ़ता है।
मेरे कोड में व्यक्तिगत रूप से 'ग्लोबल' वेरिएबल का उपयोग करने का एकमात्र समय सार्वजनिक स्थैतिक क्षेत्रों के रूप में है जो अपरिवर्तनीय हैं। इस मामले में कार्यक्रम के अन्य हिस्सों के चारों ओर खराब होने वाले मूल्य के बारे में चिंता करने की कोई आवश्यकता नहीं है और निश्चित रूप से प्रत्येक वर्ग में समान मूल्यों के साथ एक दर्जन चर होने की तुलना में इसके बहुत अच्छे हैं।
व्यक्तिगत रूप से, मैं रनटाइम कॉन्फ़िगरेशन के लिए ग्लोबल्स का उपयोग करता हूं - यदि एक कॉन्फ़िगरेशन प्रॉपर्टी को एप्लिकेशन स्टार्टअप पर लोड किया गया है, और केवल बार-बार बदलता है (और केवल तब एक जगह से), यह भयानक और त्रुटि-प्रवण है इसे हर विधि के पास से गुजरने के लिए उपयोग करने की आवश्यकता हो सकती है कुछ बिंदु पर। किसी ऐसी चीज का उपयोग करने से बेहतर है जिसे कहीं से भी दायरे में लाया जा सकता है, जिसका उपयोग करने की आवश्यकता है, क्योंकि यह आपके विधि हस्ताक्षर और कॉल साइटों को अव्यवस्थित और अस्पष्ट नहीं करता है।
CONFIG_
या CFG_
उपसर्ग के साथ सादे ग्लोबल्स ।
वास्तविक समय / एम्बेडेड सिस्टम को छोड़कर, आपको केवल निरंतर मूल्यों के लिए ग्लोबल्स का उपयोग करना चाहिए, वास्तव में। अगर आपको लगता है कि आप उनके बिना अपनी समस्या को हल नहीं कर सकते हैं, तो आप शायद कुछ गलत कर रहे हैं।
इसके अलावा, सिंगलटन पैटर्न में देखें , यह ठंड उन परिस्थितियों में ग्लोबल्स के लिए एक बेहतर समाधान प्रदान करता है जब आपको वैश्विक पहुंच बिंदु के लिए कुछ की आवश्यकता होती है।
TIMES_TO_ITERATE_THROUGH_THIS_PARTICULAR_LOOP
केवल एक फ़ाइल / वर्ग / अनुभाग में प्रासंगिक है जहां 'यह विशेष लूप' दिखाई देता है।
वैश्विक चर के साथ समस्या यह है कि आपको अपने कोड में हर जगह उनके बारे में पता होना चाहिए। हालाँकि एक बार जब आप तय कर लेते हैं कि आपको किसी विशेष वैश्विक के बारे में जानने की जरूरत है, तो इसका भारी उपयोग करने में कुछ और कमी है। इसलिए मेरी राय है कि आपके पास बहुत कम वैश्विक चर होने चाहिए, लेकिन जो कुछ आपके पास है, आपको अधिकतम लाभ प्राप्त करना चाहिए।
किसी चीज़ के एक और उदाहरण के लिए मैं इस तरह से महसूस करता हूं, रूबी में मिश्रणों के उपयोग को देखें।
यह सभी नामस्थानों के बारे में है।
एक पल के लिए कल्पना कीजिए कि दुनिया में सभी का एक ही अंतिम नाम था। क्या झंझट है।
(भारत में, सिखों के सभी समान नाम हैं: सिंह - एक नज़र डालें)
लघु संस्करण: जब यह कार्यक्रम के बारे में तर्क करना आसान बनाता है। आमतौर पर मामले कुछ प्रकार के वैश्विक राज्य या स्थिर संसाधन होते हैं जो व्यापक रूप से उपयोग किए जाते हैं।
लंबा संस्करण: टॉम हैटिन ने कहा "दूरी पर डरावना कार्रवाई के साथ" ... यह ग्लोबल्स के साथ समस्या है - आपको यह जानना होगा कि इसका उपयोग कहां और कैसे किया जा रहा है, या आप नीचे ट्रैक करने के लिए वास्तव में अजीब और कठिन हो सकते हैं कीड़े। कार्यक्रम के बारे में तर्क करने के लिए स्थानीय लोगों को इस बात की गुंजाइश कम करने के लिए रणनीति से अधिक या कम नहीं है कि प्रोग्रामर को क्या समझने की जरूरत है।
समस्या का एक अन्य पक्ष यह जानने में है कि उनका उपयोग कहां किया जाता है, आप डुप्लिकेट ग्लोबल्स के साथ समाप्त हो सकते हैं - जिस स्थिति में चीजें वास्तव में अजीब हो सकती हैं, क्योंकि अधिकांश प्रोग्राम var1 प्राप्त करते हैं और सेट करते हैं, जबकि कुछ स्थानों में var2 को पकड़ने के लिए उपयोग किया जाता है वही जानकारी। विशेष रूप से जब कई लोग एक ही कोड पर काम कर रहे हों। आईडीई का उपयोग ग्लोबल्स की लागत को कम करने में उपयोग करने में मददगार हो सकता है, लेकिन वे डुप्लिकेट के लिए कुछ भी नहीं करते हैं।
आपके पास जितने अधिक ग्लोबल्स हैं, उन पर नज़र रखने के लिए उतना ही कठिन है। उन्हें कम और दूर के बीच होना चाहिए।
ग्लोबल्स और सिंगलटन के साथ दो गोटे टेस्टीबिलिटी और तैनाती हैं।
परीक्षण के लिए, मैंने बहुत सारे अति-जटिल परीक्षण हार्नेस को सिर्फ खराब नियोजित वैश्विक और सिंगलटन जीवनकाल से निपटने के लिए देखा है। सुनिश्चित करें कि ऐसी किसी भी वस्तु में स्पष्ट और सरल स्टार्ट अप हो और नियमों को फाड़ दें।
तैनाती के रूप में, विचार करने के लिए दो मामले हैं। सबसे पहले, आपकी वैश्विक वस्तु कैसे रहेगी? क्या यह स्थिर या गतिशील पुस्तकालय में है? यदि वह वैश्विक ऑब्जेक्ट एक प्लगइन के लिए पुन: उपयोग किया जाता है, तो क्या आप अतिरिक्त प्रतियां प्राप्त करेंगे? दूसरे, क्या होता है जब उस वैश्विक वस्तु को एक समानांतर अनुप्रयोग में गिरा दिया जाता है? क्या यह धागा-सुरक्षित है?
कुल मिलाकर, मुझे लगता है कि उन कारणों का मतलब है कि ग्लोबल्स और सिंगलटन केवल असाधारण रूप से उपयोग किए जाते हैं।
एक भयानक VB6 कोड बेस में जो ग्लोबल्स का दुरुपयोग करता है जैसे कि कल नहीं है, मैं एक नया परिचय देने का दोषी हूं:
Global CsExt As New TheAppBeingRewrittenInCSharpWhileVb6CodeIsStillBeingMaintained
मुझे लगता है कि यह एक वैश्विक वस्तु के लिए कुछ वैध उपयोग मामलों में से एक है।