स्थानीय चर
कंप्यूटर विज्ञान में, एक स्थानीय चर एक चर (प्रोग्रामिंग) है जिसे लोकल गुंजाइश (प्रोग्रामिंग) दिया जाता है। सबरूटीन या ब्लॉक (प्रोग्रामिंग) में एक स्थानीय चर संदर्भ जिसमें इसे घोषित किया गया है, उसी चर नाम को बड़े दायरे में ओवरराइड करता है। प्रोग्रामिंग भाषाओं में दृश्यता के केवल दो स्तरों के साथ, स्थानीय चर वैश्विक चर के विपरीत होते हैं। दूसरी ओर, कई ALGOL-व्युत्पन्न भाषाएँ निजी चर, फ़ंक्शंस, स्थिरांक और उनके भीतर छिपे हुए प्रकारों के साथ, या तो नेस्टेड ब्लॉक या नेस्टेड समारोह द्वारा दृश्यता के किसी भी नेस्टेड स्तर की अनुमति देती हैं। स्थानीय चर प्रक्रियात्मक प्रोग्रामिंग के लिए मौलिक हैं, और अधिक सामान्यतः मॉड्यूलर प्रोग्रामिंग: स्थानीय दायरे के चर का उपयोग साइड-इफ़ेक्ट (कंप्यूटर विज्ञान) के मुद्दों से बचने के लिए किया जाता है। साइड-इफेक्ट्स जो वैश्विक चर के साथ हो सकते हैं।
स्कोप
स्थानीय चरों में एक शाब्दिक या गतिशील क्षेत्र (प्रोग्रामिंग) हो सकता है, हालांकि व्याख्यात्मक (स्थैतिक) दायरा कहीं अधिक सामान्य है। लेक्सिकल स्कोपिंग (या लेक्सिकल स्कोप; जिसे स्टैटिक स्कोपिंग या स्टैटिक स्कोप भी कहा जाता है) में, यदि एक वैरिएबल नाम का स्कोप एक निश्चित ब्लॉक है, तो इसका स्कोप ब्लॉक डेफिनिशन का प्रोग्राम टेक्स्ट है: उस ब्लॉक के टेक्स्ट के भीतर, वेरिएबल नाम मौजूद है, और चर के मान के लिए बाध्य है, लेकिन उस ब्लॉक के पाठ के बाहर, चर नाम मौजूद नहीं है। इसके विपरीत, डायनेमिक स्कोपिंग (या डायनेमिक स्कोप) में, यदि एक वैरिएबल नाम का स्कोप एक निश्चित ब्लॉक है, तो इसका स्कोप वह ब्लॉक है और सभी फ़ंक्शंस को उस ब्लॉक द्वारा सकर्मक रूप से बुलाया जाता है (सिवाय इसके कि जब किसी अन्य घोषणा द्वारा फिर से ओवरराइड किया जाता है); ब्लॉक समाप्त होने के बाद, चर नाम मौजूद नहीं है। कुछ भाषाएँ, जैसे पर्ल और सामान्य लिस्प, प्रोग्रामर को एक चर को परिभाषित या पुनर्परिभाषित करते समय स्थिर या गतिशील स्कोपिंग चुनने की अनुमति देती हैं। डायनेमिक स्कोपिंग का उपयोग करने वाली भाषाओं के उदाहरणों में शामिल हैं लोगो (प्रोग्रामिंग भाषा), Emacs lisp, और शेल भाषाएँ बैश (यूनिक्स शेल), डैश (शेल), और MirBSD कोर्न शेल (mksh) की स्थानीय घोषणा। अधिकांश अन्य भाषाएं लेक्सिकली स्कोप्ड लोकल वेरिएबल्स प्रदान करती हैं।
अधिकांश भाषाओं में, स्थानीय चर सीधे कॉल स्टैक पर संग्रहीत स्वचालित चर होते हैं। इसका मतलब यह है कि जब एक पुनरावर्तन (कंप्यूटर विज्ञान) खुद को कॉल करता है, तो फ़ंक्शन के प्रत्येक उदाहरण में स्थानीय चरों को अलग मेमोरी पता दिया जाता है। इसलिए इस दायरे के चर घोषित किए जा सकते हैं, लिखे जा सकते हैं और पढ़े जा सकते हैं, बिना किसी साइड-इफ़ेक्ट (कंप्यूटर साइंस) के जोखिम के बिना।
प्रोग्रामिंग लैंग्वेज जो वैल्यू सिमेंटिक्स द्वारा कॉल को नियोजित करती हैं, एक तथाकथित सबरूटीन प्रदान करती हैं, जिसमें फ़ंक्शन तर्क की अपनी स्थानीय प्रति होती है। अधिकांश भाषाओं में, इन स्थानीय मापदंडों को उपनेमका के भीतर अन्य स्थानीय चर के समान माना जाता है। इसके विपरीत, संदर्भ द्वारा कॉल करें और नाम से बुलाओ सिमेंटिक्स पैरामीटर को तर्कों के रूप में पास किए गए मानों के उपनाम के रूप में कार्य करने की अनुमति देता है, जिससे सबरूटीन को अपने दायरे से बाहर चर को संशोधित करने की अनुमति मिलती है।
स्थिर स्थानीय चर
एक विशेष प्रकार का स्थानीय चर, जिसे स्थैतिक स्थानीय कहा जाता है, कई मुख्यधारा भाषाओं (सी (प्रोग्रामिंग भाषा)/सी ++, मूल दृश्य, और विज़ुअल बेसिक .NET|VB.NET सहित) में उपलब्ध है जो एक मूल्य को एक से बनाए रखने की अनुमति देता है। फ़ंक्शन को दूसरे पर कॉल करें - यह स्थानीय दायरे के साथ एक स्थिर चर है। इस मामले में, फ़ंक्शन के लिए पुनरावर्ती कॉलों की भी (एकल, स्थिर मेमोरी आवंटन) चर तक पहुंच होती है। उपरोक्त सभी भाषाओं में, स्थिर चर को एक विशेष स्टोरेज क्लास कीवर्ड के साथ घोषित किया जाता है (उदाहरण के लिए, static
).
वैश्विक कार्यों में स्थिर स्थानीय लोगों का जीवनकाल स्थिर वैश्विक चर के समान होता है, क्योंकि उनका मूल्य कार्यक्रम के जीवन के लिए स्मृति में रहता है,[1] लेकिन स्वचालित स्थानीय चर के साथ कार्य क्षेत्र (वैश्विक दायरा नहीं) है।
यह स्टेटिक (कीवर्ड) के अन्य उपयोगों से अलग हैstatic
कीवर्ड, जिसके विभिन्न भाषाओं में कई अलग-अलग अर्थ होते हैं।
== पर्ल == में स्थानीय चर
पर्ल डायनेमिक और लेक्सिकली-स्कोप्ड स्थानीय चर दोनों का समर्थन करता है। कीवर्ड local
स्थानीय गतिशील-दायरे वाले चर को परिभाषित करने के लिए उपयोग किया जाता है, जबकि my
स्थानीय लेक्सिकली-स्कोप्ड चर के लिए प्रयोग किया जाता है। चूंकि डायनेमिक स्कूपिंग आज कम आम है, इसलिए पर्ल प्रलेखन ने चेतावनी दी हैlocal
ज्यादातर लोग "स्थानीय" के रूप में नहीं सोचते हैं। .[2] इसके बजाय, local
कीवर्ड एक वैश्विक (पैकेज) चर के लिए एक अस्थायी, स्कोप (प्रोग्रामिंग) | डायनामिक रूप से स्कोप्ड मान देता है, जो संलग्न ब्लॉक के अंत तक रहता है। हालाँकि, चर ब्लॉक के भीतर से बुलाए गए किसी भी फ़ंक्शन के लिए दृश्यमान है।[3] लेक्सिकली-स्कोप्ड स्थानीय चर बनाने के लिए, का उपयोग करें my
इसके बजाय ऑपरेटर।[4]
यह समझने के लिए कि यह कैसे काम करता है, निम्नलिखित कोड पर विचार करें:
<वाक्यविन्यास प्रकाश लैंग = पर्ल>
$ ए = 1;
उप एफ () {
स्थानीय $ ए; $ ए = 2; जी();
} उप जी () {
प्रिंट $a\n ;
} जी(); एफ(); जी(); </वाक्यविन्यास हाइलाइट>
यह आउटपुट करेगा:
1 2 1
ऐसा इसलिए होता है क्योंकि वैश्विक चर $a को एक नए अस्थायी (स्थानीय) अर्थ में संशोधित किया गया है f()
, लेकिन के दायरे को छोड़ने पर वैश्विक मूल्य बहाल हो जाता है f()
.
का उपयोग करते हुए my
इस मामले में बजाय local
उस मामले में तीन बार 1 प्रिंट किया होगा $a
चर फ़ंक्शन के स्थिर दायरे तक सीमित होगा f()
और द्वारा नहीं देखा गया g()
.
रैंडल एल. श्वार्ट्ज और टॉम फीनिक्स का तर्क है कि ऑपरेटर local
की तरह एक अलग नाम होना चाहिए था save
.[5]
रूबी में स्थानीय चर
एक भाषा के रूप में रूबी (प्रोग्रामिंग भाषा) पर्ल से भी प्रेरित थी, लेकिन इस मामले में, संकेतन को सरल बनाया गया था: एक वैश्विक चर नाम के पहले एक $ चिन्ह होना चाहिए, जैसे $variable_name
, जबकि एक स्थानीय चर के नाम के सामने बस कोई $ चिह्न नहीं है, जैसे variable_name
(जबकि पर्ल में सभी स्केलर मानों के सामने एक $ होता है)। ध्यान दें कि रूबी केवल पर्ल जैसे स्टेटिकली-स्कोप्ड लोकल वेरिएबल्स के लिए बिल्ट-इन सपोर्ट प्रदान करती है my
पर्ल की तरह गतिशील रूप से दायरे वाले स्थानीय चर नहीं local
. रुबी के लिए कम से कम एक पुस्तकालय है जो गतिशील रूप से दायरे वाले चर प्रदान करता है।
[6]
यह भी देखें
- वैश्विक चर
- गैर-स्थानीय चर
इस पेज में लापता आंतरिक लिंक की सूची
- दुष्प्रभाव (कंप्यूटर विज्ञान)
- सार्वत्रिक चर
- मूल्य से कॉल करें
- समारोह तर्क
- स्मृति पता
- पानी का छींटा (खोल)
- रिकर्सन (कंप्यूटर विज्ञान)
- स्थैतिक चर
- स्थैतिक स्मृति आवंटन
- स्थैतिक वैश्विक चर
- समारोह का दायरा
संदर्भ
- ↑ "वर्तमान सी मानक" (PDF). Template:छोटा (as of 2009[update]). In particular, see section 6.2.4 “Storage durations of objects”, page 32.
- ↑ perldoc.perl.org: local
- ↑ perldoc.perl.org: perlsub: Temporary Values via
local()
- ↑ perldoc.perl.org: perlsub: Private Variables via
my()
- ↑ Randal L. Schwartz and Tom Phoenix (2001-07-01). लर्निंग पर्ल तीसरा संस्करण. O'REILLY. paragraph 4.7. ISBN 0-596-00132-0.
- ↑ Conrad Irwin. "LSpace: Dynamic scope for Ruby". December 2012 http://cirw.in/blog/lspace Retrieved 2013-10-16.