स्थानीय और वैश्विक चर के बीच अंतर
स्थानीय चर और वैश्विक चर के बीच मुख्य अंतर
- स्थानीय चर को फ़ंक्शन के अंदर घोषित किया जाता है, जबकि वैश्विक चर को फ़ंक्शन के बाहर घोषित किया जाता है।
- स्थानीय चर तब बनाए जाते हैं जब फ़ंक्शन का निष्पादन शुरू हो जाता है और फ़ंक्शन समाप्त होने पर खो जाते हैं, दूसरी ओर, वैश्विक चर तब बनाए जाते हैं जब निष्पादन शुरू होता है और प्रोग्राम समाप्त होने पर खो जाते हैं।
- स्थानीय चर डेटा साझाकरण प्रदान नहीं करता है, जबकि वैश्विक चर डेटा साझाकरण प्रदान करता है।
- स्थानीय चर को स्टैक पर संग्रहीत किया जाता है, जबकि वैश्विक चर को कंपाइलर द्वारा तय किए गए एक निश्चित स्थान पर संग्रहीत किया जाता है।
- स्थानीय चर के लिए पैरामीटर पास करना आवश्यक है, जबकि वैश्विक चर के लिए यह आवश्यक नहीं है
चर (वेरिएबल) क्या है?
वेरिएबल एक ऐसा नाम है जो किसी स्टोरेज एरिया को दिया जाता है जिसे प्रोग्राम मैनिपुलेट कर सकता है। एक वेरिएबल टाइप, वेरिएबल की मेमोरी के आकार और लेआउट को निर्धारित करता है।
यह उन मानों की सीमा भी निर्धारित करता है जिन्हें उस मेमोरी के अंदर संग्रहीत करने की आवश्यकता होती है तथा उन परिचालनों की प्रकृति भी निर्धारित करता है जिन्हें उस चर पर लागू किया जा सकता है।
चर का दायरा
चर का दायरा बस चर का जीवनकाल है। यह कोड का वह ब्लॉक है जिसके अंतर्गत चर लागू या जीवित होता है। उदाहरण के लिए:
function foo(){ var x; }
आप फ़ंक्शन “foo” के अंदर एक चर “x” घोषित करते हैं। उस चर का दायरा उस फ़ंक्शन के अंदर ही रहता है, उसका उपयोग उस फ़ंक्शन के बाहर नहीं किया जा सकता है।
तीन स्थान हैं जहां आप चर घोषित कर सकते हैं चर प्रोग्रामिंग भाषा:
- किसी फ़ंक्शन या ब्लॉक के अंदर: स्थानीय चर
- सभी फ़ंक्शन के बाहर: वैश्विक चर
- फ़ंक्शन पैरामीटर की परिभाषा में: औपचारिक पैरामीटर
स्थानीय चर
स्थानीय चर प्रोग्रामिंग ब्लॉक या सबरूटीन के भीतर घोषित एक प्रकार के चर के रूप में परिभाषित किया गया है। इसका उपयोग केवल उस सबरूटीन या कोड ब्लॉक के अंदर किया जा सकता है जिसमें इसे घोषित किया गया है। स्थानीय चर तब तक मौजूद रहता है जब तक फ़ंक्शन का ब्लॉक निष्पादन के अधीन होता है। उसके बाद, यह स्वचालित रूप से नष्ट हो जाएगा।
स्थानीय चर का उदाहरण
public int add(){ int a =4; int b=5; return a+b; }
यहाँ, 'a' और 'b' स्थानीय चर हैं
वैश्विक चर
A वैश्विक चर प्रोग्राम में सबरूटीन या फ़ंक्शन के बाहर परिभाषित एक चर है। इसका एक वैश्विक दायरा है जिसका अर्थ है कि यह प्रोग्राम के पूरे जीवनकाल में अपना मान रखता है। इसलिए, इसे प्रोग्राम के भीतर परिभाषित किसी भी फ़ंक्शन द्वारा पूरे प्रोग्राम में एक्सेस किया जा सकता है, जब तक कि यह छायांकित न हो।
उदाहरण:
int a =4; int b=5; public int add(){ return a+b; }
यहाँ, 'a' और 'b' वैश्विक चर हैं।
स्थानीय चर बनाम वैश्विक चर
यहां स्थानीय और वैश्विक चर के बीच कुछ मौलिक अंतर दिए गए हैं।
प्राचल | स्थानीय | वैश्विक |
---|---|---|
विस्तार | इसे एक फ़ंक्शन के अंदर घोषित किया जाता है। | इसे फ़ंक्शन के बाहर घोषित किया जाता है. |
वैल्यू | यदि इसे आरंभीकृत नहीं किया गया है, तो एक कचरा मान संग्रहीत किया जाता है | यदि इसे आरंभीकृत नहीं किया गया है तो शून्य को डिफ़ॉल्ट के रूप में संग्रहीत किया जाता है। |
जीवनकाल | यह तब बनता है जब फ़ंक्शन का निष्पादन शुरू होता है और फ़ंक्शन के समाप्त होने पर खो जाता है। | यह प्रोग्राम के वैश्विक निष्पादन के शुरू होने से पहले बनाया जाता है और प्रोग्राम समाप्त होने पर खो जाता है। |
डेटा साझा करना | डेटा साझा करना संभव नहीं है क्योंकि स्थानीय चर के डेटा तक केवल एक फ़ंक्शन द्वारा ही पहुँचा जा सकता है। | डेटा साझा करना संभव है क्योंकि कई फ़ंक्शन एक ही वैश्विक चर तक पहुंच सकते हैं। |
पैरामीटर्स | स्थानीय चरों को अन्य फ़ंक्शन में मान तक पहुंचने के लिए पैरामीटर पास करना आवश्यक है | ग्लोबल वैरिएबल के लिए पैरामीटर पास करना आवश्यक नहीं है क्योंकि यह पूरे प्रोग्राम में दिखाई देता है |
परिवर्तनीय मान का संशोधन | जब एक फ़ंक्शन में स्थानीय चर का मान संशोधित किया जाता है, तो परिवर्तन दूसरे फ़ंक्शन में दिखाई नहीं देते हैं। | जब किसी एक फ़ंक्शन में वैश्विक चर का मान संशोधित किया जाता है तो शेष प्रोग्राम में परिवर्तन दिखाई देते हैं। |
द्वारा अभिगमित | स्थानीय चरों को, किसी फ़ंक्शन के अंदर, कथनों की सहायता से एक्सेस किया जा सकता है, जिसमें उन्हें घोषित किया जाता है। | आप प्रोग्राम में किसी भी कथन द्वारा वैश्विक चर तक पहुँच सकते हैं। |
स्मृति भंडारण | जब तक निर्दिष्ट न किया जाए, इसे स्टैक पर संग्रहीत किया जाता है। | इसे कम्पाइलर द्वारा तय किये गये एक निश्चित स्थान पर संग्रहीत किया जाता है। |
वैश्विक चरों का उपयोग करने के लाभ
- आप किसी प्रोग्राम में सभी फ़ंक्शन या मॉड्यूल से वैश्विक चर तक पहुँच सकते हैं
- आपको मॉड्यूल के बाहर केवल एक बार वैश्विक चर घोषित करने की आवश्यकता है।
- इसका उपयोग आदर्श रूप से "स्थिरांक" को संग्रहीत करने के लिए किया जाता है क्योंकि यह आपको स्थिरता बनाए रखने में मदद करता है।
- ग्लोबल वैरिएबल तब उपयोगी होता है जब एकाधिक फ़ंक्शन एक ही डेटा तक पहुँच रहे हों।
स्थानीय चरों के उपयोग के लाभ
- स्थानीय चरों का उपयोग यह गारंटी देता है कि कार्य चलने के दौरान चरों के मान यथावत बने रहेंगे
- यदि कई कार्य एक ही चर को बदलते हैं जो एक साथ चल रहा है, तो परिणाम अप्रत्याशित हो सकता है। लेकिन इसे स्थानीय चर के रूप में घोषित करने से यह समस्या हल हो जाती है क्योंकि प्रत्येक कार्य स्थानीय चर का अपना स्वयं का उदाहरण बनाएगा।
- आप स्थानीय चरों को विभिन्न फंक्शनों में एक ही नाम दे सकते हैं, क्योंकि वे केवल उस फंक्शन द्वारा ही पहचाने जाते हैं जिसमें उन्हें घोषित किया गया है।
- किसी भी फ़ंक्शन के समाप्त होते ही स्थानीय वेरिएबल्स हटा दिए जाते हैं और उनके द्वारा घेरे गए मेमोरी स्थान को खाली कर देते हैं।
वैश्विक चर का उपयोग करने के नुकसान
- यदि बहुत सारे वैरिएबल ग्लोबल घोषित कर दिए जाएं, तो वे प्रोग्राम के पूरा होने तक मेमोरी में बने रहते हैं। इससे आउट ऑफ मेमोरी की समस्या हो सकती है।
- डेटा को किसी भी फ़ंक्शन द्वारा संशोधित किया जा सकता है। प्रोग्राम में लिखा गया कोई भी कथन वैश्विक चर के मान को बदल सकता है। यह मल्टी-टास्किंग वातावरण में अप्रत्याशित परिणाम दे सकता है।
- यदि कोड रिफैक्टरिंग के कारण वैश्विक चर बंद हो जाते हैं, तो आपको उन सभी मॉड्यूल को बदलना होगा जहां उन्हें बुलाया जाता है।
स्थानीय चर का उपयोग करने के नुकसान
- स्थानीय चर की डिबगिंग प्रक्रिया काफी पेचीदा है।
- सामान्य डेटा को बार-बार पास करना आवश्यक है क्योंकि मॉड्यूल के बीच डेटा साझा करना संभव नहीं है।
- उनका दायरा बहुत सीमित है।
क्या अधिक उपयोगी है?
किसी भी भाषा में प्रोग्राम लिखते समय स्थानीय और वैश्विक चर समान रूप से महत्वपूर्ण होते हैं। हालाँकि, वैश्विक चर की एक बड़ी संख्या बहुत बड़ी मेमोरी घेर सकती है। वैश्विक चर में अवांछित परिवर्तन की पहचान करना कठिन हो जाता है। इसलिए, अवांछित वैश्विक चर घोषित करने से बचना उचित है।