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

From Vigyanwiki
No edit summary
No edit summary
 
(7 intermediate revisions by 5 users not shown)
Line 1: Line 1:
{{Short description|Named container for a particular type of data}}
{{more citations needed|date=November 2009}}
[[कंप्यूटर प्रोग्रामिंग]] में, '''वेरिएबल्स''' ('''वेरिएबल्स)''' एक संक्षिप्त भंडारण स्थान है जो एक संबद्ध [[प्रतीक]] नाम के साथ जोड़ा जाता है जिसमें मान के रूप में संदर्भित कुछ ज्ञात या अज्ञात वेरिएबल्स की जानकारी होती है या सरल शब्दों में, एक वेरिएबल्स बिट्स या {{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|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>


Line 20: Line 18:
वेरिएबल्स को संदर्भित करने वाले पहचानकर्ता का उपयोग मान को पढ़ने या मान को परिवर्तित करने या वेरिएबल्स के अन्य गुणों जैसे कि एक्सेस स्वीकृति, [[सेमाफोर (प्रोग्रामिंग)]] आदि को संपादित करने के लिए वेरिएबल्स का उपयोग करने के लिए किया जा सकता है।
वेरिएबल्स को संदर्भित करने वाले पहचानकर्ता का उपयोग मान को पढ़ने या मान को परिवर्तित करने या वेरिएबल्स के अन्य गुणों जैसे कि एक्सेस स्वीकृति, [[सेमाफोर (प्रोग्रामिंग)]] आदि को संपादित करने के लिए वेरिएबल्स का उपयोग करने के लिए किया जा सकता है।


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


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


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


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


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


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


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


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


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


[[गतिशील टाइपिंग]] भाषा जैसे कि पायथन (प्रोग्रामिंग भाषा) में, एक वेरिएबल का प्रकार उसके मान से अनुमानित होता है, और उसके मान के अनुसार परिवर्तित कर सकता है। [[सामान्य लिस्प]] में, दोनों स्थितियाँ एक साथ सम्मिलित होती हैं: एक वेरिएबल्स को एक प्रकार दिया जाता है (यदि अघोषित है, तो इसे माना जाता है {{code|T}}, सार्वभौमिक उपप्रकार) जो संकलन समय पर सम्मिलित है। मानों के भी प्रकार होते हैं, जिन्हें रनटाइम पर चेक और क्वेरी किया जा सकता है।
स्थिर रूप से टाइप की गई भाषाओं जैसे [[जाओ (प्रोग्रामिंग भाषा)|गो (प्रोग्रामिंग भाषा)]] या [[एमएल (प्रोग्रामिंग भाषा)]] में, एक वेरिएबल्स का एक प्रकार होता है, जिसका अर्थ है कि इसमें केवल कुछ प्रकार के मान ही संग्रहीत किए जा सकते हैं। उदाहरण के लिए "पूर्णांक" डेटाटाइप का एक वेरिएबल्स टेक्स्ट मानों को संग्रहीत करने से प्रतिबंधित होता है। [[गतिशील टाइपिंग|डायनामिक टाइपिंग]] भाषा जैसे कि पायथन (प्रोग्रामिंग भाषा) में, एक वेरिएबल का डेटाटाइप उसके मान से अनुमानित होता है और उसके मान के अनुसार परिवर्तित कर सकता है। [[सामान्य लिस्प]] में, दोनों स्थितियाँ एक साथ सम्मिलित होती हैं एक वेरिएबल्स को एक डेटाटाइप दिया जाता है यदि गार्बेज है तो इसे माना {{code|T}} जाता है जो रन-टाइम पर सम्मिलित है। डेटाटाइप मानों के भी प्रकार होते हैं, जिन्हें रनटाइम पर क्वेरी किया जा सकता है। वेरिएबल्स की [[सबटाइपिंग]] भी डेटाटाइप के बहुरूपता को रन-टाइम पर हल करने की स्वीकृति देती है। हालाँकि, यह वस्तु- उन्मुख फ़ंक्शन कॉल ([[C++|सी++]] में [[आभासी कार्य|वर्चुअल फ़ंक्शन]] के रूप में संदर्भित) में उपयोग किए जाने वाले प्रोग्राम से अलग है, जो वैरिएबल के सुपरटाइप के विपरीत मान प्रकार के आधार पर फ़ंक्शन कॉल को हल करता है।


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


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


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


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


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


== नामकरण परंपराएं ==
== नामकरण की परंपरा ==
{{Main|नामकरण अधिवेशन (प्रोग्रामिंग)}}
{{Main|नामकरण अधिवेशन (प्रोग्रामिंग)}}
{{See also|Identifier (computer languages)|Namespace}}
{{See also|पहचानकर्ता (कंप्यूटर भाषाएं)|नेमस्पेस}}
उनके गणितीय समकक्षों के विपरीत, प्रोग्रामिंग वेरिएबल्स और स्थिरांक सामान्यतः बहु-वर्ण नाम लेते हैं, उदा। {{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++ में स्थिर वेरिएबल्स हैं। एक स्टैक-डायनेमिक वैरिएबल को स्थानीय वैरिएबल के रूप में जाना जाता है जो निर्धारित सिंटेक्स के निष्पादित होने पर बाध्य होता है और जब प्रक्रिया वापस आती है तो इसे हटा दिया जाता है। मुख्य उदाहरण सी (प्रोग्रामिंग) और जावा(प्रोग्रमिंग) विधियों में स्थानीय वेरिएबल्स होते हैं। स्पष्ट डायनामिक वेरिएबल्स अज्ञात (संक्षिप्त) मेमोरी के भाग हैं जो प्रोग्रामर द्वारा निर्दिष्ट स्पष्ट रन-टाइम निर्देशों द्वारा आवंटित किए जाते है या हटा दिए जाते हैं। मुख्य उदाहरण सी ++ और जावा में सभी वस्तु में गतिशील वस्तुएं हैं। निहित हीप-डायनेमिक वेरिएबल्स केवल तभी भंडारण के लिए बाध्य होते हैं जब उन्हें मान निर्दिष्ट किया जाता है। आवंटन और रिलीज तब होता है जब मानों को वेरिएबल्स के लिए पुन: निर्धारित किया जाता है। जिसके परिणामस्वरूप, निहित हीप-डायनामिक वेरिएबल्स में उच्चतम डिग्री होती है। मुख्य उदाहरण जावास्क्रिप्ट, पीएचपी और एपीएल में सभी वेरिएबल्स में कुछ वेरिएबल्स होते हैं।


== यह भी देखें ==
== यह भी देखें ==
Line 98: Line 87:
{{Reflist|colwidth=30em}}
{{Reflist|colwidth=30em}}


{{Data types}}
{{DEFAULTSORT:Variable (Programming)}}
 
{{DEFAULTSORT:Variable (Programming)}}[[Category: चर (कंप्यूटर विज्ञान) | चर (कंप्यूटर विज्ञान) ]] [[Category: प्रोग्रामिंग भाषा अवधारणाओं]] [[Category: डेटा के प्रकार]] [[Category: प्रकार सिद्धांत]]
 
 


[[Category: Machine Translated Page]]
[[Category:All articles needing additional references|Variable (Programming)]]
[[Category:Created On 17/02/2023]]
[[Category:Articles needing additional references from November 2009|Variable (Programming)]]
[[Category:Articles with hatnote templates targeting a nonexistent page|Variable (Programming)]]
[[Category:Collapse templates|Variable (Programming)]]
[[Category:Created On 17/02/2023|Variable (Programming)]]
[[Category:Lua-based templates|Variable (Programming)]]
[[Category:Machine Translated Page|Variable (Programming)]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists|Variable (Programming)]]
[[Category:Pages with empty portal template|Variable (Programming)]]
[[Category:Pages with script errors|Variable (Programming)]]
[[Category:Portal templates with redlinked portals|Variable (Programming)]]
[[Category:Short description with empty Wikidata description|Variable (Programming)]]
[[Category:Sidebars with styles needing conversion|Variable (Programming)]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready|Variable (Programming)]]
[[Category:Templates generating microformats|Variable (Programming)]]
[[Category:Templates that add a tracking category|Variable (Programming)]]
[[Category:Templates that are not mobile friendly|Variable (Programming)]]
[[Category:Templates that generate short descriptions|Variable (Programming)]]
[[Category:Templates using TemplateData|Variable (Programming)]]
[[Category:Wikipedia metatemplates|Variable (Programming)]]
[[Category:चर (कंप्यूटर विज्ञान)| चर (कंप्यूटर विज्ञान) ]]
[[Category:डेटा के प्रकार|Variable (Programming)]]
[[Category:प्रकार सिद्धांत|Variable (Programming)]]
[[Category:प्रोग्रामिंग भाषा अवधारणाओं|Variable (Programming)]]

Latest revision as of 17:12, 28 August 2023

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

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

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

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

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

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

वेरिएबल्स:

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

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

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

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

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

स्कोप और सीमा

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

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

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

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

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

टाइपिंग

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

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

पैरामीटर

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

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

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

मेमोरी आवंटन

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

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

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

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

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

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

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

प्रोग्रामर प्रायः कोड शैली दिशानिर्देशों का निर्माण करते हैं और उनका अनुसरण करते हैं जो नामकरण वेरिएबल पर मार्गदर्शन प्रदान करते हैं या एक शुद्ध नामकरण योजना प्रयुक्त करते हैं। छोटे नाम टाइप करने में सामान्य होते हैं लेकिन कम वर्णनात्मक होते हैं लंबे नाम प्रायः प्रोग्राम को पढ़ने में आसान बनाते हैं और वेरिएबल्स के उद्देश्य को समझना आसान बनाते हैं। हालाँकि, वेरिएबल नामों में अत्यधिक शब्दबहुलता भी कम समझने के योग्य कोड का कारण बन सकती है।

रन-टाइम पर आधारित वेरिएबल्स के प्रकार

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

यह भी देखें

टिप्पणियाँ

  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"!