वेरिएबल्स (कंप्यूटर विज्ञान): Difference between revisions

From Vigyanwiki
(Created page with "{{Short description|Named container for a particular type of data}} {{more citations needed|date=November 2009}} कंप्यूटर प्रोग्रामिं...")
 
No edit summary
Line 1: Line 1:
{{Short description|Named container for a particular type of data}}
{{Short description|Named container for a particular type of data}}
{{more citations needed|date=November 2009}}
{{more citations needed|date=November 2009}}
[[कंप्यूटर प्रोग्रामिंग]] में, एक चर एक सार भंडारण स्थान है जो एक संबद्ध [[प्रतीक]] के साथ जोड़ा जाता है, जिसमें कुछ ज्ञात या अज्ञात मात्रा में जानकारी होती है जिसे '[[मूल्य (कंप्यूटर विज्ञान)]]' के रूप में संदर्भित किया जाता है; या सरल शब्दों में, एक चर बिट्स के एक विशेष सेट के लिए एक नामित कंटेनर है या :simple:Data_type (जैसे [[पूर्णांक (कंप्यूटर विज्ञान)]], [[फ़्लोटिंग-पॉइंट अंकगणित]], [[स्ट्रिंग (कंप्यूटर विज्ञान)]] आदि...)एक चर अंततः स्मृति पते से जुड़ा या पहचाना जा सकता है। चर नाम [[संदर्भ (कंप्यूटर विज्ञान)]] संग्रहीत मूल्य का सामान्य तरीका है, संदर्भ के आधार पर चर को संदर्भित करने के अलावा। नाम और सामग्री का यह पृथक्करण नाम को उस सटीक जानकारी से स्वतंत्र रूप से उपयोग करने की अनुमति देता है जिसका वह प्रतिनिधित्व करता है। कंप्यूटर स्रोत कोड में पहचानकर्ता रन टाइम (प्रोग्राम जीवनचक्र चरण) के दौरान एक मान (कंप्यूटर विज्ञान) के लिए बाध्यकारी नाम हो सकता है, और चर का मान इस प्रकार [[निष्पादन (कंप्यूटिंग)]] के दौरान बदल सकता है।<ref>{{citation | title=[[Compilers: Principles, Techniques, and Tools]] | pages=26–28}}</ref><ref>{{cite book |last=Knuth |first=Donald |date=1997 |title=The Art of Computer Programming |volume=1 |edition=3rd |location=Reading, Massachusetts |publisher=Addison-Wesley |pages=3–4 |isbn=0-201-89683-4 }}</ref><ref>{{cite web |title=Programming with variables |url=https://www.khanacademy.org/computing/ap-computer-science-principles/programming-101/storing-variables/a/assigning-variables |website=Khan Academy |access-date=23 March 2020}}</ref><ref>{{cite web |title=Scratch for Budding Coders |url=https://cs.harvard.edu/malan/scratch/variables.php |publisher=Harvard |access-date=23 March 2020}}</ref>
[[कंप्यूटर प्रोग्रामिंग]] में, एक वेरिएबल्स एक अमूर्त भंडारण स्थान है जो एक संबद्ध [[प्रतीक]] नाम के साथ जोड़ा जाता है, जिसमें एक मान के रूप में संदर्भित कुछ ज्ञात या अज्ञात मात्रा में जानकारी होती है; या सरल शब्दों में, एक वेरिएबल्स बिट्स या {{code|Data_type}}(जैसे [[पूर्णांक (कंप्यूटर विज्ञान)]], [[फ़्लोटिंग-पॉइंट अंकगणित|फ्लोट]], [[स्ट्रिंग (कंप्यूटर विज्ञान)]] आदि ...) के एक विशेष सेट के लिए एक नामित कंटेनर है। एक वेरिएबल्स अंततः मेमोरी एड्रेस से जुड़ा या पहचाना जा सकता है। वेरिएबल नाम [[संदर्भ (कंप्यूटर विज्ञान)]] के आधार पर वेरिएबल को संदर्भित करने के अतिरिक्त, संग्रहीत मान को संदर्भित करने का सामान्य तरीका है। नाम और सामग्री का यह पृथक्करण नाम को उस सटीक जानकारी से स्वतंत्र रूप से उपयोग करने की स्वीकृति देता है जिसका वह प्रतिनिधित्व करता है। कंप्यूटर स्रोत कोड में पहचानकर्ता रन टाइम के समय एक मान के लिए बाध्य हो सकता है, और वेरिएबल्स का मान इस प्रकार प्रोग्राम निष्पादन के समय परिवर्तित कर सकता है।।<ref>{{citation | title=[[Compilers: Principles, Techniques, and Tools]] | pages=26–28}}</ref><ref>{{cite book |last=Knuth |first=Donald |date=1997 |title=The Art of Computer Programming |volume=1 |edition=3rd |location=Reading, Massachusetts |publisher=Addison-Wesley |pages=3–4 |isbn=0-201-89683-4 }}</ref><ref>{{cite web |title=Programming with variables |url=https://www.khanacademy.org/computing/ap-computer-science-principles/programming-101/storing-variables/a/assigning-variables |website=Khan Academy |access-date=23 March 2020}}</ref><ref>{{cite web |title=Scratch for Budding Coders |url=https://cs.harvard.edu/malan/scratch/variables.php |publisher=Harvard |access-date=23 March 2020}}</ref>
प्रोग्रामिंग में वेरिएबल्स सीधे वेरिएबल (गणित) की अवधारणा के अनुरूप नहीं हो सकते हैं। उत्तरार्द्ध [[सार और ठोस]] है, जिसमें भौतिक वस्तु जैसे भंडारण स्थान का कोई संदर्भ नहीं है। कंप्यूटिंग चर का मान जरूरी नहीं कि गणित की तरह [[समीकरण]] या सूत्र का हिस्सा हो। कंप्यूटर प्रोग्रामिंग में वेरिएबल्स को उनके उपयोग के लिए अपेक्षाकृत वर्णनात्मक बनाने के लिए अक्सर लंबे नाम दिए जाते हैं, जबकि गणित में वेरिएबल्स में अक्सर ट्रांसक्रिप्शन और हेरफेर में संक्षिप्तता के लिए संक्षिप्त, एक या दो-अक्षर वाले नाम होते हैं।


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


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


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


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


वेरिएबल्स मूल्यों को संग्रहित करने के लिए कंटेनर हैं।
प्रोग्रामिंग भाषा के [[प्रकार प्रणाली]] के आधार पर, वेरिएबल्स केवल एक निर्दिष्ट [[डेटा प्रकार]] (जैसे पूर्णांक या स्ट्रिंग) को स्टोर करने में सक्षम हो सकते हैं। वैकल्पिक रूप से, एक डेटाटाइप केवल वर्तमान मान के साथ जुड़ा हो सकता है, जिससे एकल वेरिएबल्स को प्रोग्रामिंग भाषा द्वारा समर्थित कुछ भी स्टोर करने की स्वीकृति मिलती है।


चर और दायरा:
वेरिएबल्स मानों को संग्रहित करने के लिए कंटेनर हैं।
* [[स्वचालित चर]]: किसी फ़ंक्शन में प्रत्येक स्थानीय चर तभी अस्तित्व में आता है जब फ़ंक्शन को कॉल किया जाता है, [[शुद्ध समारोह]] के बाहर निकलने पर गायब हो जाता है। ऐसे चर को स्वचालित चर के रूप में जाना जाता है।
* बाहरी चर: ये वे चर हैं जो किसी फ़ंक्शन के बाहरी हैं और किसी भी फ़ंक्शन द्वारा नाम से एक्सेस किए जा सकते हैं। ये चर स्थायी रूप से अस्तित्व में रहते हैं; बल्कि यह कि कार्यों को बुलाए जाने और बाहर निकलने के रूप में प्रकट होने और गायब होने के कारण, वे उन कार्यों के बाद भी अपने मूल्यों को बनाए रखते हैं जो उन्हें सेट करते हैं।


== एक चर का संदर्भ देने वाले पहचानकर्ता ==
वेरिएबल्स और दायरा:
* [[स्वचालित चर|स्वचालित वेरिएबल्स]]: किसी फ़ंक्शन में प्रत्येक स्थानीय वेरिएबल्स तभी अस्तित्व में आता है जब फ़ंक्शन को कॉल किया जाता है, [[शुद्ध समारोह]] के बाहर निकलने पर गायब हो जाता है। ऐसे वेरिएबल्स को स्वचालित वेरिएबल्स के रूप में जाना जाता है।
* बाहरी वेरिएबल्स: ये वे वेरिएबल्स हैं जो किसी फ़ंक्शन के बाहरी हैं और किसी भी फ़ंक्शन द्वारा नाम से एक्सेस किए जा सकते हैं। ये वेरिएबल्स स्थायी रूप से अस्तित्व में रहते हैं; बल्कि यह कि कार्यों को बुलाए जाने और बाहर निकलने के रूप में प्रकट होने और गायब होने के कारण, वे उन कार्यों के बाद भी अपने मानों को बनाए रखते हैं जो उन्हें सेट करते हैं।


एक चर को संदर्भित करने वाले एक पहचानकर्ता का उपयोग मूल्य को पढ़ने, या मूल्य को बदलने, या चर के अन्य गुण (कंप्यूटिंग) को संपादित करने के लिए चर का उपयोग करने के लिए किया जा सकता है, जैसे एक्सेस अनुमति, लॉक (कंप्यूटर विज्ञान), [[सेमाफोर (प्रोग्रामिंग)]] ), वगैरह।
== एक वेरिएबल्स का संदर्भ देने वाले पहचानकर्ता ==


उदाहरण के लिए, एक चर को पहचानकर्ता द्वारा संदर्भित किया जा सकता है{{code|total_count}}और वेरिएबल में 1956 नंबर हो सकता है। यदि उसी वेरिएबल को पहचानकर्ता द्वारा संदर्भित किया जाता है{{code|r}}साथ ही, और यदि इस पहचानकर्ता का उपयोग कर रहे हैं{{code|r}}, चर का मान 2009 में बदल दिया गया है, फिर पहचानकर्ता का उपयोग करके मान पढ़ना{{code|total_count}}2009 का परिणाम मिलेगा न कि 1956 का।
एक वेरिएबल्स को संदर्भित करने वाले एक पहचानकर्ता का उपयोग मान को पढ़ने, या मान को परिवर्तित करने, या वेरिएबल्स के अन्य गुण (कंप्यूटिंग) को संपादित करने के लिए वेरिएबल्स का उपयोग करने के लिए किया जा सकता है, जैसे एक्सेस स्वीकृति, लॉक (कंप्यूटर विज्ञान), [[सेमाफोर (प्रोग्रामिंग)]] ), वगैरह।


यदि किसी चर को केवल एक पहचानकर्ता द्वारा संदर्भित किया जाता है, तो उस पहचानकर्ता को केवल चर का नाम कहा जा सकता है; अन्यथा हम इसे चर के नामों में से एक के रूप में बोल सकते हैं। उदाहरण के लिए, पिछले उदाहरण में पहचानकर्ता{{code|total_count}}विचाराधीन चर का एक नाम है, और{{code|r}}उसी चर का दूसरा नाम है।
उदाहरण के लिए, एक वेरिएबल्स को पहचानकर्ता द्वारा संदर्भित किया जा सकता है{{code|total_count}}और वेरिएबल में 1956 नंबर हो सकता है। यदि उसी वेरिएबल को पहचानकर्ता द्वारा संदर्भित किया जाता है{{code|r}}साथ ही, और यदि इस पहचानकर्ता का उपयोग कर रहे हैं{{code|r}}, वेरिएबल्स का मान 2009 में परिवर्तित कर दिया गया है, फिर पहचानकर्ता का उपयोग करके मान पढ़ना{{code|total_count}}2009 का परिणाम मिलेगा न कि 1956 का।
 
यदि किसी वेरिएबल्स को केवल एक पहचानकर्ता द्वारा संदर्भित किया जाता है, तो उस पहचानकर्ता को केवल वेरिएबल्स का नाम कहा जा सकता है; अन्यथा हम इसे वेरिएबल्स के नामों में से एक के रूप में बोल सकते हैं। उदाहरण के लिए, पिछले उदाहरण में पहचानकर्ता{{code|total_count}}विचाराधीन वेरिएबल्स का एक नाम है, और{{code|r}}उसी वेरिएबल्स का दूसरा नाम है।


== {{Anchor|Scope and extent|SCOPE-AND-EXTENT}}दायरा और सीमा ==
== {{Anchor|Scope and extent|SCOPE-AND-EXTENT}}दायरा और सीमा ==
{{See also|Free variables and bound variables}}
{{See also|Free variables and bound variables}}
एक चर का स्कोप (कंप्यूटर विज्ञान) वर्णन करता है कि प्रोग्राम के पाठ में चर का उपयोग कहाँ किया जा सकता है, जबकि एक चर की सीमा (जिसे जीवन भर भी कहा जाता है) बताता है कि किसी प्रोग्राम के निष्पादन में चर का (सार्थक) मान कब होता है। एक चर का दायरा इसकी सीमा को प्रभावित करता है। एक चर का दायरा वास्तव में चर के नाम की एक संपत्ति है, और सीमा चर के भंडारण स्थान की एक संपत्ति है। इन्हें संदर्भ (पर्यावरण भी कहा जाता है) के साथ भ्रमित नहीं होना चाहिए, जो कार्यक्रम की एक संपत्ति है, और कार्यक्रम के पाठ या निष्पादन में बिंदु से भिन्न होता है - स्कोप (कंप्यूटर विज्ञान) देखें #अवलोकन|दायरा: एक सिंहावलोकन। इसके अलावा, वस्तु का जीवनकाल चर जीवनकाल के साथ मेल खा सकता है, लेकिन कई मामलों में यह इससे बंधा नहीं है।
एक वेरिएबल्स का दायरा वर्णन करता है कि एक कार्यक्रम के टेक्स्ट में वेरिएबल्स का उपयोग कहाँ किया जा सकता है, जबकि एक वेरिएबल्स की सीमा (जिसे जीवन भर भी कहा जाता है) वर्णन करता है जब एक कार्यक्रम के निष्पादन में वेरिएबल्स का एक (सार्थक) मान होता है। एक वेरिएबल्स का दायरा इसकी सीमा को प्रभावित करता है। एक वेरिएबल्स का दायरा वास्तव में वेरिएबल्स के नाम की एक संपत्ति है, और सीमा वेरिएबल्स के भंडारण स्थान की एक संपत्ति है। इन्हें संदर्भ (पर्यावरण भी कहा जाता है) के साथ भ्रमित नहीं होना चाहिए, जो कि कार्यक्रम की एक संपत्ति है, और कार्यक्रम के टेक्स्ट या निष्पादन में बिंदु से भिन्न होता है - लेक्सिकल देखें: एक सिंहावलोकन। इसके अतिरिक्त, वस्तु का जीवनकाल वेरिएबल्स जीवनकाल के साथ मेल खा सकता है, लेकिन कई स्थितियों में यह इससे बंधा नहीं है।


स्कोप एक वेरिएबल के नाम रेजोल्यूशन (प्रोग्रामिंग लैंग्वेज) का एक महत्वपूर्ण हिस्सा है। अधिकांश भाषाएं प्रत्येक चर (साथ ही साथ किसी अन्य नामित इकाई) के लिए एक विशिष्ट दायरे को परिभाषित करती हैं, जो किसी दिए गए कार्यक्रम के भीतर भिन्न हो सकती हैं। एक चर का दायरा कार्यक्रम के पाठ का वह भाग है जिसके लिए चर के नाम का अर्थ है और जिसके लिए चर को दृश्यमान कहा जाता है। उस दायरे में प्रवेश आम तौर पर एक चर का जीवनकाल शुरू होता है (जैसा कि यह संदर्भ में आता है) और उस दायरे से बाहर निकलने से आमतौर पर इसका जीवनकाल समाप्त हो जाता है (क्योंकि यह संदर्भ से बाहर हो जाता है)। उदाहरण के लिए, [[शाब्दिक गुंजाइश]] वाला एक वेरिएबल केवल एक निश्चित फ़ंक्शन/[[सबरूटीन]] के भीतर, या अभिव्यक्ति/कथनों के एक ब्लॉक के भीतर अधिक सूक्ष्म रूप से अर्थपूर्ण है (तदनुसार [[समारोह का दायरा]] या [[ब्लॉक गुंजाइश]] के साथ); यह स्थिर रिज़ॉल्यूशन है, पार्स-टाइम या कंपाइल-टाइम पर प्रदर्शन योग्य है। वैकल्पिक रूप से, डायनेमिक स्कोप वाले वेरिएबल को रन-टाइम पर हल किया जाता है, जो ग्लोबल बाइंडिंग स्टैक पर आधारित होता है जो विशिष्ट नियंत्रण प्रवाह पर निर्भर करता है। वेरिएबल्स जो केवल एक निश्चित कार्यों के भीतर पहुंच योग्य हैं, उन्हें [[स्थानीय चर]] कहा जाता है। एक [[वैश्विक चर]], या एक अनिश्चित दायरे के साथ, कार्यक्रम में कहीं भी संदर्भित किया जा सकता है।
स्कोप एक वेरिएबल के नाम रिज़ॉल्यूशन का एक महत्वपूर्ण हिस्सा है। अधिकांश भाषाएं प्रत्येक वेरिएबल्स (साथ ही साथ किसी अन्य नामित इकाई) के लिए एक विशिष्ट दायरे को परिभाषित करती हैं, जो किसी दिए गए कार्यक्रम के भीतर भिन्न हो सकती हैं। एक वेरिएबल्स का दायरा कार्यक्रम के टेक्स्ट का वह भाग है जिसके लिए वेरिएबल्स के नाम का अर्थ है और जिसके लिए वेरिएबल्स को "दृश्यमान" कहा जाता है। उस दायरे में प्रवेश सामान्यतः एक वेरिएबल्स का जीवनकाल प्रारम्भ होता है (जैसा कि यह संदर्भ में आता है) और उस दायरे से बाहर निकलने से सामान्यतः इसका जीवनकाल समाप्त हो जाता है (क्योंकि यह संदर्भ से बाहर हो जाता है)। उदाहरण के लिए, "[[शाब्दिक गुंजाइश|लेक्सिकल स्कोप]]" वाला एक वेरिएबल केवल एक निश्चित फ़ंक्शन/[[सबरूटीन]] के भीतर ही अर्थपूर्ण है, या अभिव्यक्ति/कथनों के एक ब्लॉक के भीतर अधिक बारीक है (तदनुसार फ़ंक्शन स्कोप या ब्लॉक स्कोप के साथ); यह स्थिर रिज़ॉल्यूशन है, पार्स-टाइम या कंपाइल-टाइम पर प्रदर्शन योग्य है। वैकल्पिक रूप से, डायनेमिक स्कोप वाले वेरिएबल को रन-टाइम पर हल किया जाता है, जो ग्लोबल बाइंडिंग स्टैक पर आधारित होता है जो विशिष्ट नियंत्रण प्रवाह पर निर्भर करता है। वेरिएबल्स जो केवल एक निश्चित कार्यों के भीतर पहुंच योग्य हैं, उन्हें "[[स्थानीय चर|स्थानीय वेरिएबल्स]]" कहा जाता है। एक "[[वैश्विक चर|वैश्विक वेरिएबल्स]]", या एक अनिश्चित दायरे के साथ, कार्यक्रम में कहीं भी संदर्भित किया जा सकता है।


दूसरी ओर, एक्स्टेंट, एक वैरिएबल का रनटाइम (डायनेमिक वेरिएबल स्कूपिंग#डायनेमिक स्कूपिंग) पहलू है। एक चर के प्रत्येक नाम को एक मान से बाँधने के लिए रनटाइम पर उसकी अपनी सीमा हो सकती है। बाइंडिंग की सीमा प्रोग्राम के निष्पादन समय का वह भाग है जिसके दौरान वेरिएबल समान मान या मेमोरी स्थान को संदर्भित करता रहता है। एक रनिंग प्रोग्राम एक दी गई सीमा में कई बार प्रवेश कर सकता है और बंद हो सकता है, जैसा कि [[क्लोजर (कंप्यूटर साइंस)]] के मामले में होता है।
दूसरी ओर, एक्स्टेंट, एक वैरिएबल का रनटाइम (डायनेमिक वेरिएबल स्कूपिंग#डायनेमिक स्कूपिंग) पहलू है। एक वेरिएबल्स के प्रत्येक नाम को एक मान से बाँधने के लिए रनटाइम पर उसकी अपनी सीमा हो सकती है। बाइंडिंग की सीमा प्रोग्राम के निष्पादन समय का वह भाग है जिसके समय वेरिएबल समान मान या मेमोरी स्थान को संदर्भित करता रहता है। एक रनिंग प्रोग्राम एक दी गई सीमा में कई बार प्रवेश कर सकता है और बंद हो सकता है, जैसा कि [[क्लोजर (कंप्यूटर साइंस)]] के स्थिति में होता है।


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


अंतरिक्ष दक्षता के लिए, एक चर के लिए आवश्यक स्मृति स्थान केवल तभी आवंटित किया जा सकता है जब चर का पहली बार उपयोग किया जाता है और जब इसकी आवश्यकता नहीं होती है तो इसे मुक्त कर दिया जाता है। एक चर की आवश्यकता तभी होती है जब वह दायरे में हो, इस प्रकार प्रत्येक चर के जीवनकाल की शुरुआत तब होती है जब वह sc में प्रवेश करता हैओप अप्रयुक्त चरों को स्थान दे सकता है। इस तरह के स्थान को बर्बाद करने से बचने के लिए, संकलक अक्सर प्रोग्रामर को चेतावनी देते हैं यदि एक चर घोषित किया जाता है लेकिन उपयोग नहीं किया जाता है।
अंतरिक्ष दक्षता के लिए, एक वेरिएबल्स के लिए आवश्यक मेमोरी स्थान केवल तभी आवंटित किया जा सकता है जब वेरिएबल्स का पहली बार उपयोग किया जाता है और जब इसकी आवश्यकता नहीं होती है तो इसे मुक्त कर दिया जाता है। एक वेरिएबल्स की आवश्यकता तभी होती है जब वह दायरे में हो, इस प्रकार प्रत्येक वेरिएबल्स के जीवनकाल की प्रारम्भ जब वह दायरे में प्रवेश करता है तो अप्रयुक्त वेरिएबल्सों को स्थान दे सकता है। इस तरह के स्थान को बर्बाद करने से बचने के लिए, संकलक प्रायः प्रोग्रामर को चेतावनी देते हैं यदि एक वेरिएबल्स घोषित किया जाता है लेकिन उपयोग नहीं किया जाता है।


यह अच्छा प्रोग्रामिंग अभ्यास माना जाता है कि वेरिएबल्स के दायरे को यथासंभव संकीर्ण बनाया जाए ताकि प्रोग्राम के विभिन्न भाग गलती से एक दूसरे के वेरिएबल्स को संशोधित करके एक दूसरे के साथ बातचीत न करें। ऐसा करने से भी दूरी (कंप्यूटर विज्ञान) पर कार्रवाई रोकता है। ऐसा करने के लिए सामान्य तकनीकों में एक कार्यक्रम के विभिन्न वर्गों को अलग-अलग नामस्थान (प्रोग्रामिंग) का उपयोग करना है, या डायनामिक वेरिएबल स्कोपिंग # [[गतिशील गुंजाइश]]िंग या लेक्सिकल वेरिएबल स्कोपिंग # स्टेटिक स्कोपिंग के माध्यम से अलग-अलग वैरिएबल को निजी बनाना है।
यह अच्छा प्रोग्रामिंग अभ्यास माना जाता है कि वेरिएबल्स के दायरे को यथासंभव संकीर्ण बनाया जाए ताकि प्रोग्राम के विभिन्न भाग गलती से एक दूसरे के वेरिएबल्स को संशोधित करके एक दूसरे के साथ बातचीत न करें। ऐसा करने से भी दूरी पर कार्रवाई रोकता है। ऐसा करने के लिए सामान्य तकनीकों में एक कार्यक्रम के विभिन्न वर्गों को अलग-अलग नाम स्थान का उपयोग करना है, या गतिशील वेरिएबल्स स्कूपिंग या [[गतिशील गुंजाइश|लेक्सिकल]] वेरिएबल स्कूपिंग के माध्यम से अलग-अलग वेरिएबल्स को "निजी" बनाना है।


कई प्रोग्रामिंग भाषाएं एक अमान्य या गैर-प्रारंभिक चर को इंगित करने के लिए एक आरक्षित मान (अक्सर शून्य सूचक या शून्य) का उपयोग करती हैं।
कई प्रोग्रामिंग भाषाएं एक अमान्य या गैर-प्रारंभिक वेरिएबल्स को इंगित करने के लिए एक आरक्षित मान (प्रायः शून्य सूचक या शून्य) का उपयोग करती हैं।


== टाइपिंग ==
== टाइपिंग ==
{{Main|Type system}}
{{Main|टाइप सिस्टम}}
{{See also|Datatype}}
{{See also|Datatype}}
[[स्थिर टाइपिंग]] लैंग्वेज जैसे [[जाओ (प्रोग्रामिंग भाषा)]] या [[एमएल (प्रोग्रामिंग भाषा)]] में, एक वेरिएबल का भी एक प्रकार होता है, जिसका अर्थ है कि इसमें केवल कुछ प्रकार के मान ही संग्रहीत किए जा सकते हैं। उदाहरण के लिए, पूर्णांक प्रकार (कंप्यूटर विज्ञान) का एक चर पाठ मानों को संग्रहीत करने से प्रतिबंधित है।
[[स्थिर टाइपिंग]] भाषा की गई भाषाओं जैसे [[जाओ (प्रोग्रामिंग भाषा)|गो (प्रोग्रामिंग भाषा)]] या [[एमएल (प्रोग्रामिंग भाषा)]] में, एक वेरिएबल्स का भी एक प्रकार होता है, जिसका अर्थ है कि इसमें केवल कुछ प्रकार के मान ही संग्रहीत किए जा सकते हैं। उदाहरण के लिए, "पूर्णांक" प्रकार का एक वेरिएबल्स टेक्स्ट मानों को संग्रहीत करने से प्रतिबंधित है।


[[गतिशील टाइपिंग]] लैंग्वेज जैसे कि पायथन (प्रोग्रामिंग लैंग्वेज) में, एक वेरिएबल का प्रकार उसके मूल्य से अनुमानित होता है, और उसके मूल्य के अनुसार बदल सकता है। [[सामान्य लिस्प]] में, दोनों स्थितियाँ एक साथ मौजूद होती हैं: एक चर को एक प्रकार दिया जाता है (यदि अघोषित है, तो इसे माना जाता है {{code|T}}, सार्वभौमिक उपप्रकार) जो संकलन समय पर मौजूद है। मानों के भी प्रकार होते हैं, जिन्हें रनटाइम पर चेक और क्वेरी किया जा सकता है।
[[गतिशील टाइपिंग]] भाषा जैसे कि पायथन (प्रोग्रामिंग भाषा) में, एक वेरिएबल का प्रकार उसके मान से अनुमानित होता है, और उसके मान के अनुसार परिवर्तित कर सकता है। [[सामान्य लिस्प]] में, दोनों स्थितियाँ एक साथ सम्मिलित होती हैं: एक वेरिएबल्स को एक प्रकार दिया जाता है (यदि अघोषित है, तो इसे माना जाता है {{code|T}}, सार्वभौमिक उपप्रकार) जो संकलन समय पर सम्मिलित है। मानों के भी प्रकार होते हैं, जिन्हें रनटाइम पर चेक और क्वेरी किया जा सकता है।


वेरिएबल्स की [[सबटाइपिंग]] भी प्रकार के बहुरूपता को संकलन समय पर हल करने की अनुमति देती है। हालाँकि, यह ऑब्जेक्ट-ओरिएंटेड फ़ंक्शन कॉल्स ([[C++]] में [[आभासी कार्य]] के रूप में संदर्भित) में उपयोग किए जाने वाले बहुरूपता से अलग है, जो वैरिएबल के सुपरटाइप्स के विपरीत मूल्य प्रकार के आधार पर कॉल को हल करता है।
वेरिएबल्स की [[सबटाइपिंग]] भी प्रकार के बहुरूपता को संकलन समय पर हल करने की स्वीकृति देती है। हालाँकि, यह ऑब्जेक्ट-ओरिएंटेड फ़ंक्शन कॉल्स ([[C++]] में [[आभासी कार्य]] के रूप में संदर्भित) में उपयोग किए जाने वाले बहुरूपता से अलग है, जो वैरिएबल के सुपरटाइप्स के विपरीत मान प्रकार के आधार पर कॉल को हल करता है।


वेरिएबल्स अक्सर साधारण डेटा को स्टोर करते हैं, जैसे पूर्णांक और शाब्दिक तार, लेकिन कुछ प्रोग्रामिंग लैंग्वेज एक वैरिएबल को अन्य [[डेटा प्रकार]]्स के मूल्यों को भी स्टोर करने की अनुमति देते हैं। ऐसी भाषाएं कार्यों को पैरामीट्रिक बहुरूपता # पैरामीट्रिक बहुरूपता होने में भी सक्षम कर सकती हैं। ये फ़ंक्शन कई प्रकार के डेटा का प्रतिनिधित्व करने के लिए वेरिएबल्स की तरह काम करते हैं। उदाहरण के लिए, नामित एक समारोह {{code|length}} सूची की लंबाई निर्धारित कर सकता है। इस तरह का एक {{code|length}} फ़ंक्शन अपने प्रकार के हस्ताक्षर में एक प्रकार के चर को शामिल करके पैरामीट्रिक बहुरूपी हो सकता है, क्योंकि सूची में तत्वों की संख्या तत्वों के प्रकार से स्वतंत्र है।
वेरिएबल्स प्रायः साधारण डेटा को स्टोर करते हैं, जैसे पूर्णांक और शाब्दिक तार, लेकिन कुछ प्रोग्रामिंग भाषा एक वैरिएबल को अन्य [[डेटा प्रकार]]्स के मानों को भी स्टोर करने की स्वीकृति देते हैं। ऐसी भाषाएं कार्यों को पैरामीट्रिक बहुरूपता # पैरामीट्रिक बहुरूपता होने में भी सक्षम कर सकती हैं। ये फ़ंक्शन कई प्रकार के डेटा का प्रतिनिधित्व करने के लिए वेरिएबल्स की तरह काम करते हैं। उदाहरण के लिए, नामित एक समारोह {{code|length}} सूची की लंबाई निर्धारित कर सकता है। इस तरह का एक {{code|length}} फ़ंक्शन अपने प्रकार के हस्ताक्षर में एक प्रकार के वेरिएबल्स को सम्मिलित करके पैरामीट्रिक बहुरूपी हो सकता है, क्योंकि सूची में तत्वों की संख्या तत्वों के प्रकार से स्वतंत्र है।


== पैरामीटर ==
== पैरामीटर ==
कार्यों के औपचारिक पैरामीटर (या औपचारिक तर्क) को चर के रूप में भी संदर्भित किया जाता है। उदाहरण के लिए, इस पायथन (प्रोग्रामिंग भाषा) कोड सेगमेंट में,
कार्यों के औपचारिक पैरामीटर (या औपचारिक तर्क) को वेरिएबल्स के रूप में भी संदर्भित किया जाता है। उदाहरण के लिए, इस पायथन (प्रोग्रामिंग भाषा) कोड सेगमेंट में,
 
>>> def addtwo(x):
<वाक्यविन्यास लैंग = पिकॉन>
...   return x + 2
>>> def addtwo(x):
...
... रिटर्न एक्स + 2
>>> addtwo(5)
...
7
>>> एडटू(5)
नामित वेरिएबल्स {{code|x}} एक [[पैरामीटर (कंप्यूटर प्रोग्रामिंग)]] है क्योंकि फ़ंक्शन को कॉल करने पर इसे एक मान दिया जाता है। पूर्णांक 5 वह तर्क है जो देता है {{code|x}} इसका मान। अधिकांश भाषाओं में, फ़ंक्शन पैरामीटर का स्थानीय दायरा होता है। इस विशिष्ट वेरिएबल्स का नाम {{code|x}} के भीतर ही संदर्भित किया जा सकता है {{code|addtwo}} फ़ंक्शन (हालांकि निश्चित रूप से अन्य फ़ंक्शंस में वेरिएबल्स भी हो सकते हैं {{code|x}}).
7
</वाक्यविन्यास हाइलाइट>
 
नामित चर {{code|x}} एक [[पैरामीटर (कंप्यूटर प्रोग्रामिंग)]] है क्योंकि फ़ंक्शन को कॉल करने पर इसे एक मान दिया जाता है। पूर्णांक 5 वह तर्क है जो देता है {{code|x}} इसका मूल्य। अधिकांश भाषाओं में, फ़ंक्शन पैरामीटर का स्थानीय दायरा होता है। इस विशिष्ट चर का नाम {{code|x}} के भीतर ही संदर्भित किया जा सकता है {{code|addtwo}} फ़ंक्शन (हालांकि निश्चित रूप से अन्य फ़ंक्शंस में वेरिएबल्स भी हो सकते हैं {{code|x}}).


== मेमोरी आवंटन ==
== मेमोरी आवंटन ==
चर आवंटन की विशिष्टता और उनके मूल्यों का प्रतिनिधित्व व्यापक रूप से भिन्न होता है, दोनों प्रोग्रामिंग भाषाओं के बीच और किसी दिए गए भाषा के कार्यान्वयन के बीच। कई भाषा कार्यान्वयन स्थानीय चरों के लिए स्थान आवंटित करते हैं, जिनकी सीमा [[कॉल स्टैक]] पर एकल फ़ंक्शन कॉल के लिए रहती है, और फ़ंक्शन के वापस आने पर जिनकी मेमोरी स्वचालित रूप से पुनः प्राप्त हो जाती है। आम तौर पर, नाम बंधन में, एक चर का नाम मेमोरी में बाइट्स के कुछ विशेष ब्लॉक (समीपस्थ अनुक्रम) के पते से जुड़ा होता है, और चर पर संचालन उस ब्लॉक में हेरफेर करता है। संदर्भ (कंप्यूटर विज्ञान) वेरिएबल्स के लिए अधिक सामान्य है जिनके मान कोड संकलित होने पर बड़े या अज्ञात आकार के होते हैं। इस तरह के चर मूल्य को संग्रहीत करने के बजाय मूल्य के स्थान को संदर्भित करते हैं, जिसे डायनेमिक मेमोरी आवंटन # हीप-आधारित मेमोरी आवंटन नामक मेमोरी के पूल से आवंटित किया जाता है।
वेरिएबल्स आवंटन की विशिष्टता और उनके मानों का प्रतिनिधित्व व्यापक रूप से भिन्न होता है, दोनों प्रोग्रामिंग भाषाओं के बीच और किसी दिए गए भाषा के कार्यान्वयन के बीच। कई भाषा कार्यान्वयन स्थानीय वेरिएबल्सों के लिए स्थान आवंटित करते हैं, जिनकी सीमा [[कॉल स्टैक]] पर एकल फ़ंक्शन कॉल के लिए रहती है, और फ़ंक्शन के वापस आने पर जिनकी मेमोरी स्वचालित रूप से पुनः प्राप्त हो जाती है। सामान्यतः, नाम बंधन में, एक वेरिएबल्स का नाम मेमोरी में बाइट्स के कुछ विशेष ब्लॉक (समीपस्थ अनुक्रम) के एड्रेस से जुड़ा होता है, और वेरिएबल्स पर संचालन उस ब्लॉक में हेरफेर करता है। कोड संकलित होने पर उन वेरिएबल्सों के लिए संदर्भ अधिक सामान्य है जिनके मान बड़े या अज्ञात आकार के हैं। इस तरह के वेरिएबल्स मान को संग्रहीत करने के अतिरिक्त मान के स्थान को संदर्भित करते हैं, जिसे हीप नामक मेमोरी के पूल से आवंटित किया जाता है।


बाउंड वेरिएबल्स के मान हैं। एक मूल्य, हालांकि, एक अमूर्तता, एक विचार है; कार्यान्वयन में, एक मान को कुछ [[वस्तु (कंप्यूटर विज्ञान)]] द्वारा दर्शाया जाता है, जो कंप्यूटर मेमोरी में कहीं संग्रहीत होता है। प्रोग्राम, या रनटाइम पर्यावरण, को प्रत्येक डेटा ऑब्जेक्ट के लिए मेमोरी को अलग करना चाहिए और चूंकि मेमोरी परिमित है, यह सुनिश्चित करें कि यह मेमोरी पुन: उपयोग के लिए उपलब्ध है जब ऑब्जेक्ट को कुछ चर के मान का प्रतिनिधित्व करने की आवश्यकता नहीं है।
बाउंड वेरिएबल्स के मान हैं। एक मान, हालांकि, एक अमूर्तता, एक विचार है; कार्यान्वयन में, एक मान को कुछ डेटा [[वस्तु (कंप्यूटर विज्ञान)]] द्वारा दर्शाया जाता है, जो कंप्यूटर मेमोरी में कहीं संग्रहीत होता है। प्रोग्राम, या रनटाइम पर्यावरण, को प्रत्येक डेटा ऑब्जेक्ट के लिए मेमोरी को अलग करना चाहिए और चूंकि मेमोरी परिमित है, यह सुनिश्चित करें कि यह मेमोरी पुन: उपयोग के लिए उपलब्ध है जब ऑब्जेक्ट को कुछ वेरिएबल्स के मान का प्रतिनिधित्व करने की आवश्यकता नहीं है।


ढेर से आवंटित वस्तुओं को पुनः प्राप्त किया जाना चाहिए-खासकर जब वस्तुओं की आवश्यकता नहीं रह जाती है। एक कचरा संग्रह (कंप्यूटर विज्ञान) में | कचरा-संग्रहित भाषा (जैसे सी शार्प (प्रोग्रामिंग भाषा) | सी #, [[जावा (प्रोग्रामिंग भाषा)]], पायथन, गोलंग और [[लिस्प (प्रोग्रामिंग भाषा)]]), रनटाइम पर्यावरण स्वचालित रूप से वस्तुओं को पुनः प्राप्त करता है जब मौजूदा चर अब उन्हें संदर्भित नहीं कर सकते। गैर-कचरा-एकत्रित भाषाओं में, जैसे [[सी (प्रोग्रामिंग भाषा)]], प्रोग्राम (और प्रोग्रामर) को स्पष्ट रूप से मेमोरी को [[malloc]] करना चाहिए, और फिर बाद में इसे अपनी मेमोरी को पुनः प्राप्त करने के लिए मुक्त करना चाहिए। ऐसा करने में विफलता मेमोरी लीक की ओर ले जाती है, जिसमें प्रोग्राम के चलते हीप समाप्त हो जाता है, उपलब्ध मेमोरी समाप्त होने से अंततः विफलता का जोखिम होता है।
ढेर से आवंटित वस्तुओं को पुनः प्राप्त किया जाना चाहिए-खासकर जब वस्तुओं की आवश्यकता नहीं रह जाती है। एक कवेरिएबल्सा संग्रह (कंप्यूटर विज्ञान) में | कवेरिएबल्सा-संग्रहित भाषा (जैसे सी शार्प (प्रोग्रामिंग भाषा) | सी #, [[जावा (प्रोग्रामिंग भाषा)]], पायथन, गोलंग और [[लिस्प (प्रोग्रामिंग भाषा)]]), रनटाइम पर्यावरण स्वचालित रूप से वस्तुओं को पुनः प्राप्त करता है जब सम्मिलिता वेरिएबल्स अब उन्हें संदर्भित नहीं कर सकते। गैर-कवेरिएबल्सा-एकत्रित भाषाओं में, जैसे [[सी (प्रोग्रामिंग भाषा)]], प्रोग्राम (और प्रोग्रामर) को स्पष्ट रूप से मेमोरी को [[malloc]] करना चाहिए, और फिर बाद में इसे अपनी मेमोरी को पुनः प्राप्त करने के लिए मुक्त करना चाहिए। ऐसा करने में विफलता मेमोरी लीक की ओर ले जाती है, जिसमें प्रोग्राम के चलते हीप समाप्त हो जाता है, उपलब्ध मेमोरी समाप्त होने से अंततः विफलता का जोखिम होता है।


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


== नामकरण परंपराएं ==
== नामकरण परंपराएं ==
{{Main|Naming conventions (programming)}}
{{Main|नामकरण अधिवेशन (प्रोग्रामिंग)}}
{{See also|Identifier (computer languages)|Namespace}}
{{See also|Identifier (computer languages)|Namespace}}
उनके गणितीय समकक्षों के विपरीत, प्रोग्रामिंग चर और स्थिरांक आमतौर पर बहु-वर्ण नाम लेते हैं, उदा। {{code|COST}} या {{code|total}}. एकल-वर्ण नाम आमतौर पर केवल सहायक चर के लिए उपयोग किए जाते हैं; उदाहरण के लिए, {{code|i}}, {{code|j}}, {{code|k}} सरणी अनुक्रमणिका चर के लिए।
उनके गणितीय समकक्षों के विपरीत, प्रोग्रामिंग वेरिएबल्स और स्थिरांक सामान्यतः बहु-वर्ण नाम लेते हैं, उदा। {{code|COST}} या {{code|total}}. एकल-वर्ण नाम सामान्यतः केवल सहायक वेरिएबल्स के लिए उपयोग किए जाते हैं; उदाहरण के लिए, {{code|i}}, {{code|j}}, {{code|k}} सरणी अनुक्रमणिका वेरिएबल्स के लिए।


भाषा सिंटैक्स के हिस्से के रूप में कुछ नामकरण परंपराओं को भाषा स्तर पर लागू किया जाता है जिसमें मान्य पहचानकर्ताओं का प्रारूप शामिल होता है। लगभग सभी भाषाओं में, वेरिएबल नाम अंक (0–9) से शुरू नहीं हो सकते हैं और इसमें व्हाइटस्पेस वर्ण नहीं हो सकते हैं। चर नामों में विराम चिह्नों की अनुमति है या नहीं, भाषा से भाषा में भिन्न होता है; कई भाषाएँ चर नामों में केवल [[बल देना]] (_) की अनुमति देती हैं और अन्य सभी विराम चिह्नों को प्रतिबंधित करती हैं। कुछ प्रोग्रामिंग भाषाओं में, वेरिएबल के डेटाटाइप या स्कोप को इंगित करने के लिए वेरिएबल पहचानकर्ताओं के लिए [[सिगिल (कंप्यूटर प्रोग्रामिंग)]] एस (प्रतीक या विराम चिह्न) चिपकाए जाते हैं।
भाषा सिंटैक्स के हिस्से के रूप में कुछ नामकरण परंपराओं को भाषा स्तर पर प्रयुक्त किया जाता है जिसमें मान्य पहचानकर्ताओं का प्रारूप सम्मिलित होता है। लगभग सभी भाषाओं में, वेरिएबल नाम अंक (0–9) से प्रारम्भ नहीं हो सकते हैं और इसमें व्हाइटस्पेस वर्ण नहीं हो सकते हैं। वेरिएबल्स नामों में विराम चिह्नों की स्वीकृति है या नहीं, भाषा से भाषा में भिन्न होता है; कई भाषाएँ वेरिएबल्स नामों में केवल [[बल देना]] (_) की स्वीकृति देती हैं और अन्य सभी विराम चिह्नों को प्रतिबंधित करती हैं। कुछ प्रोग्रामिंग भाषाओं में, वेरिएबल के डेटाटाइप या स्कोप को इंगित करने के लिए वेरिएबल पहचानकर्ताओं के लिए [[सिगिल (कंप्यूटर प्रोग्रामिंग)]] एस (प्रतीक या विराम चिह्न) चिपकाए जाते हैं।


चर नामों की केस-संवेदनशीलता भी भाषाओं के बीच भिन्न होती है और कुछ भाषाओं को कुछ संस्थाओं के नामकरण में एक निश्चित मामले के उपयोग की आवश्यकता होती है;<ref group="note">For example, [[Haskell (programming language)|Haskell]] requires that names of types start with a capital letter.</ref> अधिकांश आधुनिक भाषाएँ केस-संवेदी हैं; कुछ पुरानी भाषाएँ नहीं हैं। कुछ भाषाएँ अपने स्वयं के आंतरिक उपयोग के लिए चर नामों के कुछ रूपों को आरक्षित करती हैं; कई भाषाओं में, दो अंडरस्कोर (__) से शुरू होने वाले नाम अक्सर इस श्रेणी में आते हैं।
वेरिएबल्स नामों की केस-संवेदनशीलता भी भाषाओं के बीच भिन्न होती है और कुछ भाषाओं को कुछ संस्थाओं के नामकरण में एक निश्चित स्थिति के उपयोग की आवश्यकता होती है;<ref group="note">For example, [[Haskell (programming language)|Haskell]] requires that names of types start with a capital letter.</ref> अधिकांश आधुनिक भाषाएँ केस-संवेदी हैं; कुछ पुरानी भाषाएँ नहीं हैं। कुछ भाषाएँ अपने स्वयं के आंतरिक उपयोग के लिए वेरिएबल्स नामों के कुछ रूपों को आरक्षित करती हैं; कई भाषाओं में, दो अंडरस्कोर (__) से प्रारम्भ होने वाले नाम प्रायः इस श्रेणी में आते हैं।


हालाँकि, किसी भाषा द्वारा लगाए गए बुनियादी प्रतिबंधों से परे, चरों का नामकरण काफी हद तक शैली का विषय है। [[मशीन कोड]] स्तर पर, चर नामों का उपयोग नहीं किया जाता है, इसलिए चुने गए सटीक नाम कंप्यूटर के लिए कोई मायने नहीं रखते। इस प्रकार वेरिएबल्स के नाम उन्हें पहचानते हैं, बाकी के लिए वे प्रोग्रामर्स के लिए प्रोग्राम लिखने और समझने में आसान बनाने के लिए सिर्फ एक उपकरण हैं। खराब चुने गए चर नामों का उपयोग गैर-वर्णनात्मक नामों की तुलना में कोड को समीक्षा करने में अधिक कठिन बना सकता है, इसलिए स्पष्ट नामों को अक्सर प्रोत्साहित किया जाता है।<ref name="Choosing good variable names">[http://www.dotcadot.ca/articles/how-not-pick-variables How Not To Pick Variables], Retrieved July 11, 2012 [DEAD LINK]</ref><ref name="EWD1044">{{citation | author=Edsger Dijkstra | author-link=Edsger Dijkstra | title = To hell with "meaningful identifiers"! | url = http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1044.html}}</ref>
हालाँकि, किसी भाषा द्वारा लगाए गए बुनियादी प्रतिबंधों से परे, वेरिएबल्सों का नामकरण काफी हद तक शैली का विषय है। [[मशीन कोड]] स्तर पर, वेरिएबल्स नामों का उपयोग नहीं किया जाता है, इसलिए चुने गए सटीक नाम कंप्यूटर के लिए कोई मायने नहीं रखते। इस प्रकार वेरिएबल्स के नाम उन्हें पहचानते हैं, बाकी के लिए वे प्रोग्रामर्स के लिए प्रोग्राम लिखने और समझने में आसान बनाने के लिए सिर्फ एक उपकरण हैं। खराब चुने गए वेरिएबल्स नामों का उपयोग गैर-वर्णनात्मक नामों की तुलना में कोड को समीक्षा करने में अधिक कठिन बना सकता है, इसलिए स्पष्ट नामों को प्रायः प्रोत्साहित किया जाता है।<ref name="Choosing good variable names">[http://www.dotcadot.ca/articles/how-not-pick-variables How Not To Pick Variables], Retrieved July 11, 2012 [DEAD LINK]</ref><ref name="EWD1044">{{citation | author=Edsger Dijkstra | author-link=Edsger Dijkstra | title = To hell with "meaningful identifiers"! | url = http://www.cs.utexas.edu/users/EWD/transcriptions/EWD10xx/EWD1044.html}}</ref>
प्रोग्रामर अक्सर कोड शैली दिशानिर्देशों का निर्माण करते हैं और उनका पालन करते हैं जो नामकरण चर पर मार्गदर्शन प्रदान करते हैं या एक सटीक नामकरण योजना लागू करते हैं। छोटे नाम टाइप करने में तेज़ होते हैं लेकिन कम वर्णनात्मक होते हैं; लंबे नाम अक्सर प्रोग्राम को पढ़ने में आसान बनाते हैं और वेरिएबल्स के उद्देश्य को समझना आसान बनाते हैं। हालाँकि, चर नामों में अत्यधिक वाचालता भी कम बोधगम्य कोड का कारण बन सकती है।
प्रोग्रामर प्रायः कोड शैली दिशानिर्देशों का निर्माण करते हैं और उनका पालन करते हैं जो नामकरण वेरिएबल्स पर मार्गदर्शन प्रदान करते हैं या एक सटीक नामकरण योजना प्रयुक्त करते हैं। छोटे नाम टाइप करने में तेज़ होते हैं लेकिन कम वर्णनात्मक होते हैं; लंबे नाम प्रायः प्रोग्राम को पढ़ने में आसान बनाते हैं और वेरिएबल्स के उद्देश्य को समझना आसान बनाते हैं। हालाँकि, वेरिएबल्स नामों में अत्यधिक वाचालता भी कम बोधगम्य कोड का कारण बन सकती है।


== चर प्रकार (जीवनकाल पर आधारित) ==
== वेरिएबल्स प्रकार (जीवनकाल पर आधारित) ==
हम चरों को उनके जीवनकाल के आधार पर वर्गीकृत कर सकते हैं। विभिन्न प्रकार के चर स्थिर, स्टैक-डायनेमिक, स्पष्ट हीप-डायनामिक और निहित हीप-डायनामिक हैं। एक [[स्थिर चर]] को वैश्विक चर के रूप में भी जाना जाता है, यह निष्पादन शुरू होने से पहले एक मेमोरी सेल से जुड़ा होता है और समाप्ति तक उसी मेमोरी सेल में रहता है। एक विशिष्ट उदाहरण C और C++ में स्थिर चर हैं। एक स्टैक-डायनेमिक वैरिएबल को लोकल वैरिएबल के रूप में जाना जाता है, जो डिक्लेरेशन स्टेटमेंट के निष्पादित होने पर बाध्य होता है, और जब प्रक्रिया वापस आती है तो इसे हटा दिया जाता है। मुख्य उदाहरण सी सबप्रोग्राम और जावा विधियों में स्थानीय चर हैं। स्पष्ट ढेर-गतिशील चर अज्ञात (अमूर्त) मेमोरी सेल हैं जो प्रोग्रामर द्वारा निर्दिष्ट स्पष्ट रन-टाइम निर्देशों द्वारा आवंटित और हटा दिए जाते हैं। मुख्य उदाहरण सी ++ (नए और डिलीट के माध्यम से) और जावा में सभी ऑब्जेक्ट्स में गतिशील वस्तुएं हैं। निहित हीप-डायनेमिक चर केवल तभी भंडारण के लिए बाध्य होते हैं जब उन्हें मान निर्दिष्ट किया जाता है। आवंटन और रिलीज तब होता है जब मूल्यों को चर के लिए पुन: असाइन किया जाता है। नतीजतन, निहित ढेर-गतिशील चर में लचीलेपन की उच्चतम डिग्री होती है। मुख्य उदाहरण जावास्क्रिप्ट, PHP और एपीएल में सभी चर में कुछ चर हैं।
हम वेरिएबल्सों को उनके जीवनकाल के आधार पर वर्गीकृत कर सकते हैं। विभिन्न प्रकार के वेरिएबल्स स्थिर, स्टैक-डायनेमिक, स्पष्ट हीप-डायनामिक और निहित हीप-डायनामिक हैं। एक स्थिर वेरिएबल्स को वैश्विक वेरिएबल्स के रूप में भी जाना जाता है, यह निष्पादन प्रारम्भ होने से पहले एक मेमोरी सेल से जुड़ा होता है और समाप्ति तक उसी मेमोरी सेल में रहता है। एक विशिष्ट उदाहरण C और C++ में स्थिर वेरिएबल्स हैं। एक स्टैक-डायनेमिक वैरिएबल को लोकल वैरिएबल के रूप में जाना जाता है, जो डिक्लेरेशन स्टेटमेंट के निष्पादित होने पर बाध्य होता है, और जब प्रक्रिया वापस आती है तो इसे हटा दिया जाता है। मुख्य उदाहरण सी सबप्रोग्राम और जावा विधियों में स्थानीय वेरिएबल्स हैं। स्पष्ट ढेर-गतिशील वेरिएबल्स अज्ञात (अमूर्त) मेमोरी सेल हैं जो प्रोग्रामर द्वारा निर्दिष्ट स्पष्ट रन-टाइम निर्देशों द्वारा आवंटित और हटा दिए जाते हैं। मुख्य उदाहरण सी ++ (नए और डिलीट के माध्यम से) और जावा में सभी ऑब्जेक्ट्स में गतिशील वस्तुएं हैं। निहित हीप-डायनेमिक वेरिएबल्स केवल तभी भंडारण के लिए बाध्य होते हैं जब उन्हें मान निर्दिष्ट किया जाता है। आवंटन और रिलीज तब होता है जब मानों को वेरिएबल्स के लिए पुन: असाइन किया जाता है। नतीजतन, निहित ढेर-गतिशील वेरिएबल्स में लचीलेपन की उच्चतम डिग्री होती है। मुख्य उदाहरण जावास्क्रिप्ट, PHP और एपीएल में सभी वेरिएबल्स में कुछ वेरिएबल्स हैं।


== यह भी देखें ==
== यह भी देखें ==
{{Portal|Computer programming}}
{{Portal|Computer programming}}
* [[नियंत्रण चर (प्रोग्रामिंग)]]
* [[नियंत्रण चर (प्रोग्रामिंग)|नियंत्रण वेरिएबल्स (प्रोग्रामिंग)]]
* [[गैर-स्थानीय चर]]
* [[गैर-स्थानीय चर|गैर-स्थानीय वेरिएबल्स]]
* [[अस्थायी चर]]
* [[अस्थायी चर|अस्थायी वेरिएबल्स]]
* [[चर प्रक्षेप]]
* [[चर प्रक्षेप|वेरिएबल्स प्रक्षेप]]
* [[अदिश (गणित)]]
* [[अदिश (गणित)]]


==टिप्पणियाँ==
==टिप्पणियाँ==
{{Reflist|group=note}}
{{Reflist|group=note}}


==संदर्भ==
==संदर्भ==

Revision as of 12:54, 26 February 2023

कंप्यूटर प्रोग्रामिंग में, एक वेरिएबल्स एक अमूर्त भंडारण स्थान है जो एक संबद्ध प्रतीक नाम के साथ जोड़ा जाता है, जिसमें एक मान के रूप में संदर्भित कुछ ज्ञात या अज्ञात मात्रा में जानकारी होती है; या सरल शब्दों में, एक वेरिएबल्स बिट्स या Data_type(जैसे पूर्णांक (कंप्यूटर विज्ञान), फ्लोट, स्ट्रिंग (कंप्यूटर विज्ञान) आदि ...) के एक विशेष सेट के लिए एक नामित कंटेनर है। एक वेरिएबल्स अंततः मेमोरी एड्रेस से जुड़ा या पहचाना जा सकता है। वेरिएबल नाम संदर्भ (कंप्यूटर विज्ञान) के आधार पर वेरिएबल को संदर्भित करने के अतिरिक्त, संग्रहीत मान को संदर्भित करने का सामान्य तरीका है। नाम और सामग्री का यह पृथक्करण नाम को उस सटीक जानकारी से स्वतंत्र रूप से उपयोग करने की स्वीकृति देता है जिसका वह प्रतिनिधित्व करता है। कंप्यूटर स्रोत कोड में पहचानकर्ता रन टाइम के समय एक मान के लिए बाध्य हो सकता है, और वेरिएबल्स का मान इस प्रकार प्रोग्राम निष्पादन के समय परिवर्तित कर सकता है।।[1][2][3][4]

प्रोग्रामिंग में वेरिएबल्स सीधे गणित में वेरिएबल्स की अवधारणा के अनुरूप नहीं हो सकते हैं। उत्तरार्द्ध अमूर्त है, जिसमें भौतिक वस्तु जैसे भंडारण स्थान का कोई संदर्भ नहीं है। कंप्यूटिंग वेरिएबल्स का मान जरूरी नहीं कि गणित की तरह समीकरण या सूत्र का हिस्सा हो। कंप्यूटर प्रोग्रामिंग में वेरिएबल्स को उनके उपयोग के लिए अपेक्षाकृत वर्णनात्मक बनाने के लिए प्रायः लंबे नाम दिए जाते हैं, जबकि गणित में वेरिएबल्स में प्रायः ट्रांसक्रिप्शन और हेरफेर में संक्षिप्तता के लिए संक्षिप्त, एक या दो-अक्षर वाले नाम होते हैं।

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

कंपाइलर को वेरिएबल्स के प्रतीकात्मक नामों को डेटा के वास्तविक स्थानों से परिवर्तित करना होगा। जबकि एक वेरिएबल्स का नाम, प्रकार और स्थान प्रायः स्थिर रहता है, कार्यक्रम के निष्पादन के समय स्थान में संग्रहीत डेटा को परिवर्तित करा जा सकता है।

एक वेरिएबल्स पर क्रिया

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

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

वेरिएबल्स मानों को संग्रहित करने के लिए कंटेनर हैं।

वेरिएबल्स और दायरा:

  • स्वचालित वेरिएबल्स: किसी फ़ंक्शन में प्रत्येक स्थानीय वेरिएबल्स तभी अस्तित्व में आता है जब फ़ंक्शन को कॉल किया जाता है, शुद्ध समारोह के बाहर निकलने पर गायब हो जाता है। ऐसे वेरिएबल्स को स्वचालित वेरिएबल्स के रूप में जाना जाता है।
  • बाहरी वेरिएबल्स: ये वे वेरिएबल्स हैं जो किसी फ़ंक्शन के बाहरी हैं और किसी भी फ़ंक्शन द्वारा नाम से एक्सेस किए जा सकते हैं। ये वेरिएबल्स स्थायी रूप से अस्तित्व में रहते हैं; बल्कि यह कि कार्यों को बुलाए जाने और बाहर निकलने के रूप में प्रकट होने और गायब होने के कारण, वे उन कार्यों के बाद भी अपने मानों को बनाए रखते हैं जो उन्हें सेट करते हैं।

एक वेरिएबल्स का संदर्भ देने वाले पहचानकर्ता

एक वेरिएबल्स को संदर्भित करने वाले एक पहचानकर्ता का उपयोग मान को पढ़ने, या मान को परिवर्तित करने, या वेरिएबल्स के अन्य गुण (कंप्यूटिंग) को संपादित करने के लिए वेरिएबल्स का उपयोग करने के लिए किया जा सकता है, जैसे एक्सेस स्वीकृति, लॉक (कंप्यूटर विज्ञान), सेमाफोर (प्रोग्रामिंग) ), वगैरह।

उदाहरण के लिए, एक वेरिएबल्स को पहचानकर्ता द्वारा संदर्भित किया जा सकता हैtotal_countऔर वेरिएबल में 1956 नंबर हो सकता है। यदि उसी वेरिएबल को पहचानकर्ता द्वारा संदर्भित किया जाता हैrसाथ ही, और यदि इस पहचानकर्ता का उपयोग कर रहे हैंr, वेरिएबल्स का मान 2009 में परिवर्तित कर दिया गया है, फिर पहचानकर्ता का उपयोग करके मान पढ़नाtotal_count2009 का परिणाम मिलेगा न कि 1956 का।

यदि किसी वेरिएबल्स को केवल एक पहचानकर्ता द्वारा संदर्भित किया जाता है, तो उस पहचानकर्ता को केवल वेरिएबल्स का नाम कहा जा सकता है; अन्यथा हम इसे वेरिएबल्स के नामों में से एक के रूप में बोल सकते हैं। उदाहरण के लिए, पिछले उदाहरण में पहचानकर्ताtotal_countविचाराधीन वेरिएबल्स का एक नाम है, औरrउसी वेरिएबल्स का दूसरा नाम है।

दायरा और सीमा

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

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

दूसरी ओर, एक्स्टेंट, एक वैरिएबल का रनटाइम (डायनेमिक वेरिएबल स्कूपिंग#डायनेमिक स्कूपिंग) पहलू है। एक वेरिएबल्स के प्रत्येक नाम को एक मान से बाँधने के लिए रनटाइम पर उसकी अपनी सीमा हो सकती है। बाइंडिंग की सीमा प्रोग्राम के निष्पादन समय का वह भाग है जिसके समय वेरिएबल समान मान या मेमोरी स्थान को संदर्भित करता रहता है। एक रनिंग प्रोग्राम एक दी गई सीमा में कई बार प्रवेश कर सकता है और बंद हो सकता है, जैसा कि क्लोजर (कंप्यूटर साइंस) के स्थिति में होता है।

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

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

यह अच्छा प्रोग्रामिंग अभ्यास माना जाता है कि वेरिएबल्स के दायरे को यथासंभव संकीर्ण बनाया जाए ताकि प्रोग्राम के विभिन्न भाग गलती से एक दूसरे के वेरिएबल्स को संशोधित करके एक दूसरे के साथ बातचीत न करें। ऐसा करने से भी दूरी पर कार्रवाई रोकता है। ऐसा करने के लिए सामान्य तकनीकों में एक कार्यक्रम के विभिन्न वर्गों को अलग-अलग नाम स्थान का उपयोग करना है, या गतिशील वेरिएबल्स स्कूपिंग या लेक्सिकल वेरिएबल स्कूपिंग के माध्यम से अलग-अलग वेरिएबल्स को "निजी" बनाना है।

कई प्रोग्रामिंग भाषाएं एक अमान्य या गैर-प्रारंभिक वेरिएबल्स को इंगित करने के लिए एक आरक्षित मान (प्रायः शून्य सूचक या शून्य) का उपयोग करती हैं।

टाइपिंग

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

गतिशील टाइपिंग भाषा जैसे कि पायथन (प्रोग्रामिंग भाषा) में, एक वेरिएबल का प्रकार उसके मान से अनुमानित होता है, और उसके मान के अनुसार परिवर्तित कर सकता है। सामान्य लिस्प में, दोनों स्थितियाँ एक साथ सम्मिलित होती हैं: एक वेरिएबल्स को एक प्रकार दिया जाता है (यदि अघोषित है, तो इसे माना जाता है T, सार्वभौमिक उपप्रकार) जो संकलन समय पर सम्मिलित है। मानों के भी प्रकार होते हैं, जिन्हें रनटाइम पर चेक और क्वेरी किया जा सकता है।

वेरिएबल्स की सबटाइपिंग भी प्रकार के बहुरूपता को संकलन समय पर हल करने की स्वीकृति देती है। हालाँकि, यह ऑब्जेक्ट-ओरिएंटेड फ़ंक्शन कॉल्स (C++ में आभासी कार्य के रूप में संदर्भित) में उपयोग किए जाने वाले बहुरूपता से अलग है, जो वैरिएबल के सुपरटाइप्स के विपरीत मान प्रकार के आधार पर कॉल को हल करता है।

वेरिएबल्स प्रायः साधारण डेटा को स्टोर करते हैं, जैसे पूर्णांक और शाब्दिक तार, लेकिन कुछ प्रोग्रामिंग भाषा एक वैरिएबल को अन्य डेटा प्रकार्स के मानों को भी स्टोर करने की स्वीकृति देते हैं। ऐसी भाषाएं कार्यों को पैरामीट्रिक बहुरूपता # पैरामीट्रिक बहुरूपता होने में भी सक्षम कर सकती हैं। ये फ़ंक्शन कई प्रकार के डेटा का प्रतिनिधित्व करने के लिए वेरिएबल्स की तरह काम करते हैं। उदाहरण के लिए, नामित एक समारोह length सूची की लंबाई निर्धारित कर सकता है। इस तरह का एक length फ़ंक्शन अपने प्रकार के हस्ताक्षर में एक प्रकार के वेरिएबल्स को सम्मिलित करके पैरामीट्रिक बहुरूपी हो सकता है, क्योंकि सूची में तत्वों की संख्या तत्वों के प्रकार से स्वतंत्र है।

पैरामीटर

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

>>> def addtwo(x):
...   return x + 2
...
>>> addtwo(5)
7

नामित वेरिएबल्स x एक पैरामीटर (कंप्यूटर प्रोग्रामिंग) है क्योंकि फ़ंक्शन को कॉल करने पर इसे एक मान दिया जाता है। पूर्णांक 5 वह तर्क है जो देता है x इसका मान। अधिकांश भाषाओं में, फ़ंक्शन पैरामीटर का स्थानीय दायरा होता है। इस विशिष्ट वेरिएबल्स का नाम x के भीतर ही संदर्भित किया जा सकता है addtwo फ़ंक्शन (हालांकि निश्चित रूप से अन्य फ़ंक्शंस में वेरिएबल्स भी हो सकते हैं x).

मेमोरी आवंटन

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

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

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

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

नामकरण परंपराएं

उनके गणितीय समकक्षों के विपरीत, प्रोग्रामिंग वेरिएबल्स और स्थिरांक सामान्यतः बहु-वर्ण नाम लेते हैं, उदा। COST या total. एकल-वर्ण नाम सामान्यतः केवल सहायक वेरिएबल्स के लिए उपयोग किए जाते हैं; उदाहरण के लिए, i, j, k सरणी अनुक्रमणिका वेरिएबल्स के लिए।

भाषा सिंटैक्स के हिस्से के रूप में कुछ नामकरण परंपराओं को भाषा स्तर पर प्रयुक्त किया जाता है जिसमें मान्य पहचानकर्ताओं का प्रारूप सम्मिलित होता है। लगभग सभी भाषाओं में, वेरिएबल नाम अंक (0–9) से प्रारम्भ नहीं हो सकते हैं और इसमें व्हाइटस्पेस वर्ण नहीं हो सकते हैं। वेरिएबल्स नामों में विराम चिह्नों की स्वीकृति है या नहीं, भाषा से भाषा में भिन्न होता है; कई भाषाएँ वेरिएबल्स नामों में केवल बल देना (_) की स्वीकृति देती हैं और अन्य सभी विराम चिह्नों को प्रतिबंधित करती हैं। कुछ प्रोग्रामिंग भाषाओं में, वेरिएबल के डेटाटाइप या स्कोप को इंगित करने के लिए वेरिएबल पहचानकर्ताओं के लिए सिगिल (कंप्यूटर प्रोग्रामिंग) एस (प्रतीक या विराम चिह्न) चिपकाए जाते हैं।

वेरिएबल्स नामों की केस-संवेदनशीलता भी भाषाओं के बीच भिन्न होती है और कुछ भाषाओं को कुछ संस्थाओं के नामकरण में एक निश्चित स्थिति के उपयोग की आवश्यकता होती है;[note 1] अधिकांश आधुनिक भाषाएँ केस-संवेदी हैं; कुछ पुरानी भाषाएँ नहीं हैं। कुछ भाषाएँ अपने स्वयं के आंतरिक उपयोग के लिए वेरिएबल्स नामों के कुछ रूपों को आरक्षित करती हैं; कई भाषाओं में, दो अंडरस्कोर (__) से प्रारम्भ होने वाले नाम प्रायः इस श्रेणी में आते हैं।

हालाँकि, किसी भाषा द्वारा लगाए गए बुनियादी प्रतिबंधों से परे, वेरिएबल्सों का नामकरण काफी हद तक शैली का विषय है। मशीन कोड स्तर पर, वेरिएबल्स नामों का उपयोग नहीं किया जाता है, इसलिए चुने गए सटीक नाम कंप्यूटर के लिए कोई मायने नहीं रखते। इस प्रकार वेरिएबल्स के नाम उन्हें पहचानते हैं, बाकी के लिए वे प्रोग्रामर्स के लिए प्रोग्राम लिखने और समझने में आसान बनाने के लिए सिर्फ एक उपकरण हैं। खराब चुने गए वेरिएबल्स नामों का उपयोग गैर-वर्णनात्मक नामों की तुलना में कोड को समीक्षा करने में अधिक कठिन बना सकता है, इसलिए स्पष्ट नामों को प्रायः प्रोत्साहित किया जाता है।[5][6] प्रोग्रामर प्रायः कोड शैली दिशानिर्देशों का निर्माण करते हैं और उनका पालन करते हैं जो नामकरण वेरिएबल्स पर मार्गदर्शन प्रदान करते हैं या एक सटीक नामकरण योजना प्रयुक्त करते हैं। छोटे नाम टाइप करने में तेज़ होते हैं लेकिन कम वर्णनात्मक होते हैं; लंबे नाम प्रायः प्रोग्राम को पढ़ने में आसान बनाते हैं और वेरिएबल्स के उद्देश्य को समझना आसान बनाते हैं। हालाँकि, वेरिएबल्स नामों में अत्यधिक वाचालता भी कम बोधगम्य कोड का कारण बन सकती है।

वेरिएबल्स प्रकार (जीवनकाल पर आधारित)

हम वेरिएबल्सों को उनके जीवनकाल के आधार पर वर्गीकृत कर सकते हैं। विभिन्न प्रकार के वेरिएबल्स स्थिर, स्टैक-डायनेमिक, स्पष्ट हीप-डायनामिक और निहित हीप-डायनामिक हैं। एक स्थिर वेरिएबल्स को वैश्विक वेरिएबल्स के रूप में भी जाना जाता है, यह निष्पादन प्रारम्भ होने से पहले एक मेमोरी सेल से जुड़ा होता है और समाप्ति तक उसी मेमोरी सेल में रहता है। एक विशिष्ट उदाहरण C और C++ में स्थिर वेरिएबल्स हैं। एक स्टैक-डायनेमिक वैरिएबल को लोकल वैरिएबल के रूप में जाना जाता है, जो डिक्लेरेशन स्टेटमेंट के निष्पादित होने पर बाध्य होता है, और जब प्रक्रिया वापस आती है तो इसे हटा दिया जाता है। मुख्य उदाहरण सी सबप्रोग्राम और जावा विधियों में स्थानीय वेरिएबल्स हैं। स्पष्ट ढेर-गतिशील वेरिएबल्स अज्ञात (अमूर्त) मेमोरी सेल हैं जो प्रोग्रामर द्वारा निर्दिष्ट स्पष्ट रन-टाइम निर्देशों द्वारा आवंटित और हटा दिए जाते हैं। मुख्य उदाहरण सी ++ (नए और डिलीट के माध्यम से) और जावा में सभी ऑब्जेक्ट्स में गतिशील वस्तुएं हैं। निहित हीप-डायनेमिक वेरिएबल्स केवल तभी भंडारण के लिए बाध्य होते हैं जब उन्हें मान निर्दिष्ट किया जाता है। आवंटन और रिलीज तब होता है जब मानों को वेरिएबल्स के लिए पुन: असाइन किया जाता है। नतीजतन, निहित ढेर-गतिशील वेरिएबल्स में लचीलेपन की उच्चतम डिग्री होती है। मुख्य उदाहरण जावास्क्रिप्ट, PHP और एपीएल में सभी वेरिएबल्स में कुछ वेरिएबल्स हैं।

यह भी देखें

टिप्पणियाँ

  1. For example, Haskell requires that names of types start with a capital letter.

संदर्भ

  1. Compilers: Principles, Techniques, and Tools, pp. 26–28
  2. Knuth, Donald (1997). The Art of Computer Programming. Vol. 1 (3rd ed.). Reading, Massachusetts: Addison-Wesley. pp. 3–4. ISBN 0-201-89683-4.
  3. "Programming with variables". Khan Academy. Retrieved 23 March 2020.
  4. "Scratch for Budding Coders". Harvard. Retrieved 23 March 2020.
  5. How Not To Pick Variables, Retrieved July 11, 2012 [DEAD LINK]
  6. Edsger Dijkstra, To hell with "meaningful identifiers"!