वैश्विक चर: Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Computer programming, a variable accessible throughout a computer program}} {{refimprove|date=July 2009}} कंप्यूटर प्रोग्र...")
 
No edit summary
 
(8 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Short description|Computer programming, a variable accessible throughout a computer program}}
{{Short description|Computer programming, a variable accessible throughout a computer program}}
{{refimprove|date=July 2009}}
[[कंप्यूटर प्रोग्रामिंग]] में, एक वैश्विक चर वैश्विक विस्तार (प्रोग्रामिंग) के साथ एक चर है, जिसका अर्थ है कि यह पूरे कार्यक्रम में दृश्यमान (इसलिए सुलभ) है, जब तक कि [[ परिवर्तनीय छायांकन ]] न हो। सभी वैश्विक चरों के समुच्चय को ''वैश्विक वातावरण'' या ''वैश्विक स्थिति'' के रूप में जाना जाता है। संकलित भाषाओं में, वैश्विक चर सामान्यतः स्थिर चर होते हैं, जिनकी सीमा (जीवनकाल) कार्यक्रम की संपूर्ण कार्यावधि है, यद्यपि व्याख्या की गई भाषाओं (कमांड-लाइन दुभाषियों सहित) में, वैश्विक चर सामान्यतः गतिशील रूप से आवंटित किए जाने पर आवंटित किए जाते हैं, क्योंकि वे समय से पहले ज्ञात नहीं होते हैं ।
[[कंप्यूटर प्रोग्रामिंग]] में, एक वैश्विक चर वैश्विक दायरे (प्रोग्रामिंग) के साथ एक चर है, जिसका अर्थ है कि यह पूरे कार्यक्रम में दृश्यमान (इसलिए सुलभ) है, जब तक कि [[ परिवर्तनीय छायांकन ]] न हो। सभी वैश्विक चरों के समुच्चय को ''वैश्विक वातावरण'' या ''वैश्विक स्थिति'' के रूप में जाना जाता है। कार्यक्रम का रनटाइम, हालांकि इंटरप्रिटेड_लैंग्वेज (कमांड-लाइन दुभाषियों सहित) में, घोषित किए जाने पर वैश्विक चर आमतौर पर गतिशील रूप से आवंटित किए जाते हैं, क्योंकि वे समय से पहले ज्ञात नहीं होते हैं।


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


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


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


== [[पर्यावरण चर]] ==
== [[पर्यावरण चर]] ==
पर्यावरण चर कुछ [[ऑपरेटिंग सिस्टम]] द्वारा प्रदान [[की]] जाने वाली सुविधा है। ओएस के [[खोल (कंप्यूटिंग)]] के भीतर ([[यूनिक्स]] में [[के शेल]], [[लिनक्स]] में बैश (यूनिक्स खोल), डॉस में कमांड.कॉम ​​और [[ खिड़कियाँ ]]में सीएमडी.ईएक्सई) वे एक प्रकार के चर हैं: उदाहरण के लिए, यूनिक्स और संबंधित प्रणालियों में एक साधारण चर पर्यावरण चर बन जाता है जब <code>export</code> कीवर्ड का प्रयोग किया जाता है। शेल के अलावा अन्य प्रोग्राम कोड को उन्हें [[एपीआई]] कॉल द्वारा एक्सेस करना होता है, जैसे कि
पर्यावरण चर कुछ [[Index.php?title=प्रचालन तंत्र|प्रचालन तंत्र]] द्वारा प्रदान [[की]] जाने वाली सुविधा है। ओएस के [[खोल (कंप्यूटिंग)]] के भीतर ([[यूनिक्स]] में [[Index.php?title=ksh|ksh]], [[लिनक्स]] में bash, डॉस में COMMAND.COM ​​और [[Index.php?title=विंडोज़|विंडोज़]] में CMD.EXE) वे एक प्रकार के चर हैं: उदाहरण के लिए, यूनिक्स और संबंधित प्रणालियों में एक साधारण चर पर्यावरण चर बन जाता है जब <code>export</code> संकेतशब्द का प्रयोग किया जाता है। शेल के अतिरिक्त अन्य प्रोग्राम कोड को उन्हें [[एपीआई]] कॉल द्वारा अभिगमन करना होता है, जैसे कि<code>getenv()</code> और <code>setenv()</code>.
<code>getenv()</code> और <code>setenv()</code>.


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


जब एक चाइल्ड प्रोसेस बनाया जाता है, तो यह सभी पर्यावरण चर और उनके मूल्यों को मूल प्रक्रिया से इनहेरिट करता है। आमतौर पर, जब कोई प्रोग्राम किसी अन्य प्रोग्राम को कॉल करता है, तो यह पहले [[ कांटा (यूनिक्स) ]] आईएनजी द्वारा एक चाइल्ड प्रोसेस बनाता है, फिर चाइल्ड पर्यावरण को आवश्यकतानुसार समायोजित करता है और अंत में चाइल्ड प्रोग्राम (यूनिक्स) को कॉल करने के लिए खुद को निष्पादित करता है। बाल प्रक्रियाएं इसलिए अपने साथियों के साथ संवाद करने के लिए पर्यावरण चर का उपयोग नहीं कर सकती हैं, दूरी की समस्या पर कार्रवाई से बचती हैं।
जब एक बाल प्रक्रिया बनाया जाता है, तो यह सभी पर्यावरण चर और उनके मूल्यों को मूल प्रक्रिया से प्राप्त करता है। सामान्यतः, जब कोई प्रोग्राम किसी अन्य प्रोग्राम को पुकारता है, तो यह पहले [[Index.php?title=फोर्क|फोर्क]] द्वारा एक बाल प्रक्रिया बनाता है, फिर वंशज पर्यावरण को आवश्यकतानुसार समायोजित करता है और अंत में वंशज प्रोग्राम (यूनिक्स) को पुकारने के लिए खुद को निष्पादित करता है। बाल प्रक्रियाएं इसलिए अपने साथियों के साथ संवाद करने के लिए पर्यावरण चर का उपयोग नहीं कर सकती हैं, दूरी की समस्या पर कार्रवाई से बचती हैं।


== ग्लोबल-ओनली और ग्लोबल-बाय-डिफॉल्ट ==
== केवल-वैश्विक और स्वतः निर्धारित रूप से वैश्विक ==


कई गैर-[[संरचित प्रोग्रामिंग]] भाषाएं, जैसे (के प्रारंभिक संस्करण) [[ बुनियादी ]], [[कोबोल]] और [[फोरट्रान]] I (1956) केवल वैश्विक चर प्रदान करते हैं। फोरट्रान II (1958) ने स्थानीय चरों के साथ सबरूटीन्स और वैश्विक चरों तक पहुँचने के लिए COMMON कीवर्ड की शुरुआत की। फोरट्रान में कॉमन का उपयोग फोरट्रान 77 में जारी रहा,<ref>{{cite web|url=https://web.stanford.edu/class/me200c/tutorial_77/13_common.html|title=Fortran 77 Tutorial}}</ref> और बाद की भाषाओं जैसे PL/SQL को प्रभावित किया। ग्लोबल्स के लिए नामित सामान्य समूह कुछ हद तक संरचित नामस्थानों की तरह व्यवहार करते हैं।<ref>{{cite web|url=http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Companion/first_steps/stack_and_heap.html|title=First Steps: Stack & Heap Objects}}</ref> [[फोर्थ (प्रोग्रामिंग भाषा)]], [[लुआ (प्रोग्रामिंग भाषा)]], [[पर्ल]] और अधिकांश शेल में डिफ़ॉल्ट रूप से चर भी वैश्विक होते हैं।
कई गैर-[[संरचित प्रोग्रामिंग]] भाषाएं, जैसे [[Index.php?title=बेसिक|बेसिक]], [[कोबोल]] और [[Index.php?title=फोरट्रान I|फोरट्रान I]] (1956) (के प्रारंभिक संस्करण) केवल वैश्विक चर प्रदान करते हैं। फोरट्रान II (1958) ने स्थानीय चरों के साथ सबरूटीन्स और वैश्विक चरों तक पहुँचने के लिए COMMON संकेतशब्द की शुरुआत की। फोरट्रान में COMMON का उपयोग फोरट्रान 77 में जारी रहा,<ref>{{cite web|url=https://web.stanford.edu/class/me200c/tutorial_77/13_common.html|title=Fortran 77 Tutorial}}</ref> और बाद की भाषाओं जैसे PL/SQL को प्रभावित किया। ग्लोबल्स के लिए नामित COMMON  समूह कुछ सीमा तक संरचित नामस्थानों की तरह व्यवहार करते हैं।<ref>{{cite web|url=http://www-numi.fnal.gov/offline_software/srt_public_context/WebDocs/Companion/first_steps/stack_and_heap.html|title=First Steps: Stack & Heap Objects}}</ref> [[फोर्थ (प्रोग्रामिंग भाषा)]], [[लुआ (प्रोग्रामिंग भाषा)]], [[पर्ल]] और अधिकांश शेल में निर्धारित रूप से चर भी वैश्विक होते हैं।


== भाषा द्वारा ==
== भाषा द्वारा ==
Line 26: Line 24:
=== सी और सी ++ ===
=== सी और सी ++ ===


C भाषा में a नहीं है <code>global</code> [[कीवर्ड (कंप्यूटर प्रोग्रामिंग)]]। हालाँकि, किसी फ़ंक्शन के बाहर घोषित किए गए चर में फ़ाइल का दायरा होता है, जिसका अर्थ है कि वे फ़ाइल के भीतर दिखाई दे रहे हैं। फ़ाइल स्कोप के साथ घोषित वेरिएबल्स उनकी घोषणा और संकलन इकाई के अंत के बीच दिखाई दे रहे हैं (<code>.c</code> फ़ाइल) (जब तक कि एक समान-नामित वस्तु द्वारा एक नजदीकी दायरे में छायांकित न हो, जैसे कि स्थानीय चर); और वे स्पष्ट रूप से बाहरी संबंध रखते हैं और इस प्रकार न केवल उन्हें दिखाई देते हैं <code>.c</code> फ़ाइल या [[संकलन इकाई]] जिसमें उनकी घोषणाएँ होती हैं, लेकिन हर दूसरी संकलन इकाई जो पूर्ण कार्यक्रम बनाने के लिए जुड़ी होती है। बाहरी लिंकेज, हालांकि, अन्य फ़ाइलों में इस तरह के एक चर के उपयोग के लिए पर्याप्त नहीं है: एक संकलन इकाई के लिए इस तरह के वैश्विक चर को सही ढंग से एक्सेस करने के लिए, इसके प्रकार को जानने की आवश्यकता होगी। यह उपयोग करके प्रत्येक फ़ाइल में चर घोषित करके पूरा किया जाता है <code>extern</code> कीवर्ड। (यह प्रत्येक फ़ाइल में घोषित किया जाएगा लेकिन केवल एक में परिभाषित किया जा सकता है।) ऐसे <code>extern</code> घोषणाएं अक्सर साझा शीर्षलेख फ़ाइल में रखी जाती हैं, क्योंकि यह सभी के लिए सामान्य अभ्यास है <code>.c</code> कम से कम एक को शामिल करने के लिए एक परियोजना में फाइलें <code>.h</code> फ़ाइल: मानक हेडर फ़ाइल <code>errno.h</code> बनाना एक उदाहरण है <code>errno</code> एक परियोजना में सभी मॉड्यूल के लिए चर सुलभ। जहां इस वैश्विक पहुंच तंत्र को समस्याग्रस्त माना जाता है, इसे स्टेटिक (कीवर्ड) | का उपयोग करके अक्षम किया जा सकता है<code>static</code> कीवर्ड जो एक वैरिएबल को फाइल स्कोप तक सीमित करता है, और इसके साथ आयात करने का प्रयास करेगा <code>extern</code> संकलन (या लिंकिंग) त्रुटि बढ़ाने के लिए।<ref>C in a Nutshell, P.Prinz & T Crawford, 2006, O'Reilly, Ch 11</ref>
C भाषा में एक <code>global</code>[[कीवर्ड (कंप्यूटर प्रोग्रामिंग)|संकेतशब्द (कंप्यूटर प्रोग्रामिंग)]]नहीं है। यद्यपि, किसी कार्य के बाहर घोषित किए गए चर में फ़ाइल का क्षेत्र होता है, जिसका अर्थ है कि वे फ़ाइल के भीतर दिखाई दे रहे हैं। फ़ाइल क्षेत्र के साथ घोषित चर उनकी घोषणा और संकलन इकाई के अंत के बीच दिखाई दे रहे हैं (<code>.c</code> फ़ाइल) (जब तक कि एक समान-नामित वस्तु द्वारा एक नजदीकी विस्तार में छायांकित न हो, जैसे कि स्थानीय चर); और वे स्पष्ट रूप से बाहरी संबंध रखते हैं और इस प्रकार न केवल उन्हें दिखाई देते हैं <code>.c</code> फ़ाइल या [[संकलन इकाई]] जिसमें उनकी घोषणाएँ होती हैं, लेकिन हर दूसरी संकलन इकाई जो पूर्ण कार्यक्रम बनाने के लिए जुड़ी होती है। बाहरी शृंखलन, यद्यपि,अन्य फ़ाइलों में इस तरह के एक चर के उपयोग के लिए पर्याप्त नहीं है: एक संकलन इकाई के लिए इस तरह के वैश्विक चर को सही ढंग से अभिगम करने के लिए, इसके प्रकार को जानने की आवश्यकता होगी। यह <code>extern</code> संकेतशब्द का उपयोग करके प्रत्येक फ़ाइल में चर घोषित करके पूरा किया जाता है (यह प्रत्येक फ़ाइल में घोषित किया जाएगा लेकिन केवल एक में परिभाषित किया जा सकता है।) ऐसे <code>extern</code> घोषणाएं प्राय: साझा शीर्षलेख फ़ाइल में रखी जाती हैं, क्योंकि यह सभी के लिए सामान्य अभ्यास है <code>.c</code> कम से कम एक को सम्मिलित करने के लिए एक परियोजना में फाइलें <code>.h</code> फ़ाइल: मानक हेडर फ़ाइल <code>errno.h</code> बनाना एक उदाहरण है <code>errno</code> एक परियोजना में सभी मॉड्यूल के लिए चर सुलभ है। जहां इस वैश्विक पहुंच तंत्र को समस्याग्रस्त माना जाता है, इसे<code>static</code>संकेतशब्द का उपयोग करके अक्षम किया जा सकता है<code>static</code> संकेतशब्द जो एक चर को फाइल क्षेत्र तक सीमित करता है, और इसके साथ <code>extern</code> संकलन (या को जोड़ने) त्रुटि बढ़ाने के लिए आयात करने का प्रयास करेगा ।<ref>C in a Nutshell, P.Prinz & T Crawford, 2006, O'Reilly, Ch 11</ref>
 
[[सी (प्रोग्रामिंग भाषा)]] में वैश्विक चर का एक उदाहरण:
[[सी (प्रोग्रामिंग भाषा)]] में वैश्विक चर का एक उदाहरण:
<syntaxhighlight lang="C">
<syntaxhighlight lang="C">
Line 81: Line 80:
}
}
</syntaxhighlight>
</syntaxhighlight>
चूंकि चर एक बाहरी है, इसे मुख्य के अलावा किसी फ़ंक्शन में उपयोग करने के लिए पैरामीटर के रूप में पास करने की कोई आवश्यकता नहीं है। यह मॉड्यूल में हर समारोह से संबंधित है।
चूंकि चर एक बाहरी है, इसे मुख्य के अतिरिक्त किसी कार्य में उपयोग करने के लिए प्राचल के रूप में पास करने की कोई आवश्यकता नहीं है। यह मॉड्यूल में हर कार्य से संबंधित है।


आउटपुट होगा:
आउटपुट होगा:
Line 90: Line 89:


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


<syntaxhighlight lang="Java">
<syntaxhighlight lang="Java">
Line 100: Line 99:


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


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


=== अन्य भाषाएँ ===
=== अन्य भाषाएँ ===


* पायथन (प्रोग्रामिंग लैंग्वेज) और [[MATLAB]] में एक वैश्विक चर को कहीं भी घोषित किया जा सकता है <code>global</code> कीवर्ड।<ref>{{cite web|title=What are the rules for local and global variables in Python?|url=https://docs.python.org/3/faq/programming.html#what-are-the-rules-for-local-and-global-variables-in-python|website=docs.python.org|publisher=Python Software Foundation|access-date=4 June 2020}}</ref><ref>{{cite web|title=चर को वैश्विक घोषित करें|url=http://in.mathworks.com/help/matlab/ref/global.html|website=in.mathworks.com|publisher=The MathWorks, Inc.|access-date=7 February 2015}}</ref>
* पायथन (प्रोग्रामिंग भाषा) और [[MATLAB]] में एक वैश्विक चर को<code>global</code> संकेतशब्द के साथ कहीं भी घोषित किया जा सकता है ।<ref>{{cite web|title=What are the rules for local and global variables in Python?|url=https://docs.python.org/3/faq/programming.html#what-are-the-rules-for-local-and-global-variables-in-python|website=docs.python.org|publisher=Python Software Foundation|access-date=4 June 2020}}</ref><ref>{{cite web|title=चर को वैश्विक घोषित करें|url=http://in.mathworks.com/help/matlab/ref/global.html|website=in.mathworks.com|publisher=The MathWorks, Inc.|access-date=7 February 2015}}</ref>
* [[ रूबी (प्रोग्रामिंग भाषा) ]] के ग्लोबल वेरिएबल्स को एक ' द्वारा अलग किया जाता है<code>$</code>' [[सिगिल (कंप्यूटर प्रोग्रामिंग)]]उदाहरण के लिए, कई पूर्वनिर्धारित वैश्विक मौजूद हैं <code>$$</code> वर्तमान [[प्रक्रिया आईडी]] है।
* [[ रूबी (प्रोग्रामिंग भाषा) ]]के वैश्विक चर को एक ' <code>$</code>' [[सिगिल (कंप्यूटर प्रोग्रामिंग)]]द्वारा अलग किया जाता है। कई पूर्वनिर्धारित वैश्विक उपस्थित हैं उदाहरण के लिए, <code>$$</code> वर्तमान [[प्रक्रिया आईडी]] है।


== यह भी देखें ==
== यह भी देखें ==
Line 123: Line 118:
==संदर्भ==
==संदर्भ==
{{reflist}}
{{reflist}}
[[Category: चर (कंप्यूटर विज्ञान)]]
[[de:Variable (Programmierung)#Variablen in einer Blockstruktur]]
[[de:Variable (Programmierung)#Variablen in einer Blockstruktur]]


[[Category: Machine Translated Page]]
[[Category:Created On 15/05/2023]]
[[Category:Created On 15/05/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:चर (कंप्यूटर विज्ञान)]]

Latest revision as of 14:31, 15 June 2023

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

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

प्रयोग करें

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

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

पर्यावरण चर

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

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

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

केवल-वैश्विक और स्वतः निर्धारित रूप से वैश्विक

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

भाषा द्वारा

सी और सी ++

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

सी (प्रोग्रामिंग भाषा) में वैश्विक चर का एक उदाहरण:

#include <stdio.h>

// This is the file-scope variable (with internal linkage), visible only in
// this compilation unit.
static int shared = 3;

// This one has external linkage (not limited to this compilation unit).
extern int over_shared;

// Also internal linkage.
int over_shared_too = 2;

static void ChangeShared() {
  // Reference to the file-scope variable in a function.
  shared = 5;
}

static void LocalShadow() {
  // Local variable that will hide the global of the same name.
  int shared;

  // This will affect only the local variable and will have no effect on the
  // file-scope variable of the same name.
  shared = 1000;
}

static void ParamShadow(int shared) {
  // This will affect only the parameter and will have no effect on the file-
  // scope variable of the same name.
  shared = -shared;
}

int main() {
  // Reference to the file-scope variable.

  printf("%d\n", shared);

  ChangeShared();

  printf("%d\n", shared);

  LocalShadow();

  printf("%d\n", shared);

  ParamShadow(1);

  printf("%d\n", shared);

  return 0;
}

चूंकि चर एक बाहरी है, इसे मुख्य के अतिरिक्त किसी कार्य में उपयोग करने के लिए प्राचल के रूप में पास करने की कोई आवश्यकता नहीं है। यह मॉड्यूल में हर कार्य से संबंधित है।

आउटपुट होगा:

3
5
5
5

जावा

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

public class Global {
    public static int a;
}


पीएचपी

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

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

अन्य भाषाएँ

यह भी देखें

संदर्भ

  1. "Fortran 77 Tutorial".
  2. "First Steps: Stack & Heap Objects".
  3. C in a Nutshell, P.Prinz & T Crawford, 2006, O'Reilly, Ch 11
  4. "What are the rules for local and global variables in Python?". docs.python.org. Python Software Foundation. Retrieved 4 June 2020.
  5. "चर को वैश्विक घोषित करें". in.mathworks.com. The MathWorks, Inc. Retrieved 7 February 2015.