वैश्विक चर

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

कुछ भाषाओं में, सभी चर वैश्विक होते हैं, या निर्धारित रूप से वैश्विक होते हैं, जबकि अधिकांश आधुनिक भाषाओं में चर का सीमित क्षेत्र होता है, सामान्यतः शाब्दिक क्षेत्र होता है, यद्यपि कार्यक्रम के शीर्ष स्तर पर एक चर घोषित करके वैश्विक चर प्राय: उपलब्ध होते हैं। यद्यपि, अन्य भाषाओं में, वैश्विक चर उपस्थित नहीं हैं; ये सामान्यतः मॉड्यूलर प्रोग्रामिंग भाषा हैं जो एक मॉड्यूल संरचना, या वर्ग आधारित प्रोग्रामिंग को लागू करती हैं।वर्ग-आधारित वस्तु-उन्मुख प्रोग्रामिंग भाषा जो एक वर्ग संरचना को लागू करती हैं।

प्रयोग करें
वैश्विक चर के साथ सहभागिता तंत्र को वैश्विक पर्यावरण (वैश्विक स्थिति भी देखें) तंत्र कहा जाता है। वैश्विक पर्यावरण प्रतिमान स्थानीय पर्यावरण प्रतिमान के विपरीत है, जहां सभी चर बिना किसी साझा स्मृति तंत्र के स्थानीय हैं (और इसलिए संदेश पास करने के लिए सभी पारस्परिक व्यवहार को फिर से आयोजित किया जा सकता है)।

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

Interaction mechanisms with global variables are called global environment (see also global state) mechanisms. The global environment paradigm is contrasted with the local environment paradigm, where all variables are local with no shared memory (and therefore all interactions can be reconducted to message passing).

Global variables are used extensively to pass information between sections of code that do not share a caller/callee relation like concurrent threads and signal handlers. Languages (including C) where each file defines an implicit namespace eliminate most of the problems seen with languages with a global namespace though some problems may persist without proper encapsulation. Without proper locking (such as with a mutex), code using global variables will not be thread-safe except for read only values in protected memory.

पर्यावरण चर
पर्यावरण चर कुछ ऑपरेटिंग सिस्टम द्वारा प्रदान की जाने वाली सुविधा है। ओएस के खोल (कंप्यूटिंग) के भीतर (यूनिक्स में ksh, लिनक्स में bash, डॉस में COMMAND.COM ​​और विंडोज़ में CMD.EXE) वे एक प्रकार के चर हैं: उदाहरण के लिए, यूनिक्स और संबंधित प्रणालियों में एक साधारण चर पर्यावरण चर बन जाता है जब   संकेतशब्द का प्रयोग किया जाता है। शेल के अतिरिक्त अन्य प्रोग्राम कोड को उन्हें एपीआई कॉल द्वारा अभिगमन करना होता है, जैसे कि  और.

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

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

केवल-वैश्विक और स्वतः निर्धारित रूप से वैश्विक
कई गैर-संरचित प्रोग्रामिंग भाषाएं, जैसे बेसिक, कोबोल और फोरट्रान I (1956) (के प्रारंभिक संस्करण) केवल वैश्विक चर प्रदान करते हैं। फोरट्रान II (1958) ने स्थानीय चरों के साथ सबरूटीन्स और वैश्विक चरों तक पहुँचने के लिए COMMON संकेतशब्द की शुरुआत की। फोरट्रान में COMMON का उपयोग फोरट्रान 77 में जारी रहा, और बाद की भाषाओं जैसे PL/SQL को प्रभावित किया। ग्लोबल्स के लिए नामित  COMMON  समूह कुछ सीमा तक संरचित नामस्थानों की तरह व्यवहार करते हैं। फोर्थ (प्रोग्रामिंग भाषा), लुआ (प्रोग्रामिंग भाषा), पर्ल और अधिकांश शेल में  निर्धारित रूप से चर भी वैश्विक होते हैं।

सी और सी ++
C भाषा में a नहीं है  संकेतशब्द (कंप्यूटर प्रोग्रामिंग)। यद्यपि, किसी फ़ंक्शन के बाहर घोषित किए गए चर में फ़ाइल काक्षेत्र होता है, जिसका अर्थ है कि वे फ़ाइल के भीतर दिखाई दे रहे हैं। फ़ाइल स्कोप के साथ घोषित वेरिएबल्स उनकी घोषणा और संकलन इकाई के अंत के बीच दिखाई दे रहे हैं (  फ़ाइल) (जब तक कि एक समान-नामित वस्तु द्वारा एक नजदीकी विस्तार में छायांकित न हो, जैसे कि स्थानीय चर); और वे स्पष्ट रूप से बाहरी संबंध रखते हैं और इस प्रकार न केवल उन्हें दिखाई देते हैं   फ़ाइल या संकलन इकाई जिसमें उनकी घोषणाएँ होती हैं, लेकिन हर दूसरी संकलन इकाई जो पूर्ण कार्यक्रम बनाने के लिए जुड़ी होती है। बाहरी लिंकेज, हालांकि, अन्य फ़ाइलों में इस तरह के एक चर के उपयोग के लिए पर्याप्त नहीं है: एक संकलन इकाई के लिए इस तरह के वैश्विक चर को सही ढंग से एक्सेस करने के लिए, इसके प्रकार को जानने की आवश्यकता होगी। यह उपयोग करके प्रत्येक फ़ाइल में चर घोषित करके पूरा किया जाता है   संकेतशब्द। (यह प्रत्येक फ़ाइल में घोषित किया जाएगा लेकिन केवल एक में परिभाषित किया जा सकता है।) ऐसे   घोषणाएं प्राय: साझा शीर्षलेख फ़ाइल में रखी जाती हैं, क्योंकि यह सभी के लिए सामान्य अभ्यास है   कम से कम एक को शामिल करने के लिए एक परियोजना में फाइलें   फ़ाइल: मानक हेडर फ़ाइल   बनाना एक उदाहरण है   एक परियोजना में सभी मॉड्यूल के लिए चर सुलभ। जहां इस वैश्विक पहुंच तंत्र को समस्याग्रस्त माना जाता है, इसे स्टेटिक (संकेतशब्द) | का उपयोग करके अक्षम किया जा सकता है  संकेतशब्द जो एक वैरिएबल को फाइल स्कोप तक सीमित करता है, और इसके साथ आयात करने का प्रयास करेगा   संकलन (या लिंकिंग) त्रुटि बढ़ाने के लिए। सी (प्रोग्रामिंग भाषा) में वैश्विक चर का एक उदाहरण: चूंकि चर एक बाहरी है, इसे मुख्य के अलावा किसी फ़ंक्शन में उपयोग करने के लिए पैरामीटर के रूप में पास करने की कोई आवश्यकता नहीं है। यह मॉड्यूल में हर समारोह से संबंधित है।

आउटपुट होगा: 3 5 5 5

जावा
जावा जैसी कुछ भाषाओं में वैश्विक चर नहीं होते हैं। जावा में, वे सभी चर जो स्थानीय चर नहीं हैं, एक वर्ग के क्षेत्र हैं। इसलिए सभी चर या तो एक वर्ग या एक विधि के विस्तार में हैं। जावा में, स्थिर क्षेत्र (वर्ग चर के रूप में भी जाना जाता है) वर्ग के किसी भी उदाहरण से स्वतंत्र रूप से उपस्थित हैं और एक प्रति सभी उदाहरणों के बीच साझा की जाती है; इसलिए सार्वजनिक स्थैतिक क्षेत्रों का उपयोग उनके समान साझाकरण व्यवहार के कारण अन्य भाषाओं में वैश्विक चर के समान उद्देश्यों के लिए किया जाता है:

पीएचपी
PHP में एक है  संकेतशब्द और वैश्विक चर का उपयोग करने के कई असामान्य तरीके है। बाहरी कार्यों के लिए घोषित चर में फ़ाइल विस्तार होता है (जो कि अधिकांश उद्देश्यों के लिए व्यापक क्षेत्र है)। हालांकि, जब तक के साथ आयात नहीं किया जाता है, तब तक वे कार्यों के अंदर पहुंच योग्य नहीं होते हैं   संकेतशब्द (यानी, संकेतशब्द वैश्विक चरों तक पहुंचता है, यह उन्हें घोषित नहीं करता है)।

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

PHP has a  keyword and a number of unusual ways of using global variables. Variables declared outside functions have file scope (which is for most purposes the widest scope). However, they are not accessible inside functions unless imported with the  keyword (i.e., the keyword accesses global variables, it does not declare them).

However, some predefined variables, known as superglobals are always accessible. They are all arrays. A general purpose one is the  superglobal, which contains all the variables defined out of function scope. Changes to its elements change the original variables, and additions create new variables. The superglobals  and   are widely used in web programming.

अन्य भाषाएँ

 * पायथन (प्रोग्रामिंग भाषा) और MATLAB में एक वैश्विक चर को कहीं भी घोषित किया जा सकता है  संकेतशब्द।
 * रूबी (प्रोग्रामिंग भाषा) के ग्लोबल वेरिएबल्स को एक ' द्वारा अलग किया जाता है ' सिगिल (कंप्यूटर प्रोग्रामिंग)। उदाहरण के लिए, कई पूर्वनिर्धारित वैश्विक उपस्थित हैं  वर्तमान प्रक्रिया आईडी है।

यह भी देखें

 * स्थानीय चर
 * गैर-स्थानीय चर
 * सिंगलटन पैटर्न
 * चर (कंप्यूटर विज्ञान)
 * स्थिर चर
 * बाहरी चर

संदर्भ
Variable (Programmierung)