वैश्विक चर
कंप्यूटर प्रोग्रामिंग में, एक वैश्विक चर वैश्विक विस्तार (प्रोग्रामिंग) के साथ एक चर है, जिसका अर्थ है कि यह पूरे कार्यक्रम में दृश्यमान (इसलिए सुलभ) है, जब तक कि परिवर्तनीय छायांकन न हो। सभी वैश्विक चरों के समुच्चय को वैश्विक वातावरण या वैश्विक स्थिति के रूप में जाना जाता है। संकलित भाषाओं में, वैश्विक चर सामान्यतः स्थिर चर होते हैं, जिनकी सीमा (जीवनकाल) कार्यक्रम की संपूर्ण कार्यावधि है, यद्यपि व्याख्या की गई भाषाओं (कमांड-लाइन दुभाषियों सहित) में, वैश्विक चर सामान्यतः गतिशील रूप से आवंटित किए जाने पर आवंटित किए जाते हैं, क्योंकि वे समय से पहले ज्ञात नहीं होते हैं ।
कुछ भाषाओं में, सभी चर वैश्विक होते हैं, या निर्धारित रूप से वैश्विक होते हैं, जबकि अधिकांश आधुनिक भाषाओं में चर का सीमित क्षेत्र होता है, सामान्यतः शाब्दिक क्षेत्र होता है, यद्यपि कार्यक्रम के शीर्ष स्तर पर एक चर घोषित करके वैश्विक चर प्राय: उपलब्ध होते हैं। यद्यपि, अन्य भाषाओं में, वैश्विक चर उपस्थित नहीं हैं; ये सामान्यतः मॉड्यूलर प्रोग्रामिंग भाषा हैं जो एक मॉड्यूल संरचना, या वर्ग आधारित प्रोग्रामिंग को लागू करती हैं।वर्ग-आधारित वस्तु-उन्मुख प्रोग्रामिंग भाषा जो एक वर्ग संरचना को लागू करती हैं।
प्रयोग करें
वैश्विक चर के साथ सहभागिता तंत्र को वैश्विक पर्यावरण (वैश्विक स्थिति भी देखें) तंत्र कहा जाता है। वैश्विक पर्यावरण प्रतिमान स्थानीय पर्यावरण प्रतिमान के विपरीत है, जहां सभी चर बिना किसी साझा स्मृति तंत्र के स्थानीय हैं (और इसलिए संदेश पास करने के लिए सभी पारस्परिक व्यवहार को फिर से आयोजित किया जा सकता है)।
वैश्विक चर का व्यापक रूप से उपयोग कोड के उन वर्गों के बीच जानकारी देने के लिए किया जाता है जो समवर्ती धारा और सिग्नल हैंडलर जैसे कॉल करने वाला/कॉल प्राप्त करने वाला संबंध साझा नहीं करते हैं। भाषाएं (सी सहित) जहां प्रत्येक फ़ाइल एक अंतर्निहित नामस्थान को परिभाषित करती है, वैश्विक नामस्थान वाली भाषाओं के साथ देखी जाने वाली अधिकांश समस्याओं को समाप्त करती है, यद्यपि कुछ समस्याएं उचित संपुटीकरण के बिना बनी रह सकती हैं। उचित लॉकिंग के बिना (जैसे म्युटेक्स के साथ), वैश्विक चर का उपयोग करने वाला कोड सुरक्षित मेमोरी में केवल पढ़ने के लिए छोड़कर धारा-सुरक्षित नहीं होगा।
पर्यावरण चर
पर्यावरण चर कुछ प्रचालन तंत्र द्वारा प्रदान की जाने वाली सुविधा है। ओएस के खोल (कंप्यूटिंग) के भीतर (यूनिक्स में 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
वेब प्रोग्रामिंग में व्यापक रूप से उपयोग किया जाता है।
अन्य भाषाएँ
- पायथन (प्रोग्रामिंग भाषा) और MATLAB में एक वैश्विक चर को
global
संकेतशब्द के साथ कहीं भी घोषित किया जा सकता है ।[4][5] - रूबी (प्रोग्रामिंग भाषा) के वैश्विक चर को एक '
$
' सिगिल (कंप्यूटर प्रोग्रामिंग)द्वारा अलग किया जाता है। कई पूर्वनिर्धारित वैश्विक उपस्थित हैं उदाहरण के लिए,$$
वर्तमान प्रक्रिया आईडी है।
यह भी देखें
संदर्भ
- ↑ "Fortran 77 Tutorial".
- ↑ "First Steps: Stack & Heap Objects".
- ↑ C in a Nutshell, P.Prinz & T Crawford, 2006, O'Reilly, Ch 11
- ↑ "What are the rules for local and global variables in Python?". docs.python.org. Python Software Foundation. Retrieved 4 June 2020.
- ↑ "चर को वैश्विक घोषित करें". in.mathworks.com. The MathWorks, Inc. Retrieved 7 February 2015.