वेरिएबल्स (कंप्यूटर विज्ञान): Difference between revisions
(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}} | ||
[[कंप्यूटर प्रोग्रामिंग]] में, एक | [[कंप्यूटर प्रोग्रामिंग]] में, एक वेरिएबल्स एक अमूर्त भंडारण स्थान है जो एक संबद्ध [[प्रतीक]] नाम के साथ जोड़ा जाता है, जिसमें एक मान के रूप में संदर्भित कुछ ज्ञात या अज्ञात मात्रा में जानकारी होती है; या सरल शब्दों में, एक वेरिएबल्स बिट्स या {{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}}उसी वेरिएबल्स का दूसरा नाम है। | |||
== {{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}} | ||
एक | एक वेरिएबल्स का दायरा वर्णन करता है कि एक कार्यक्रम के टेक्स्ट में वेरिएबल्स का उपयोग कहाँ किया जा सकता है, जबकि एक वेरिएबल्स की सीमा (जिसे जीवन भर भी कहा जाता है) वर्णन करता है जब एक कार्यक्रम के निष्पादन में वेरिएबल्स का एक (सार्थक) मान होता है। एक वेरिएबल्स का दायरा इसकी सीमा को प्रभावित करता है। एक वेरिएबल्स का दायरा वास्तव में वेरिएबल्स के नाम की एक संपत्ति है, और सीमा वेरिएबल्स के भंडारण स्थान की एक संपत्ति है। इन्हें संदर्भ (पर्यावरण भी कहा जाता है) के साथ भ्रमित नहीं होना चाहिए, जो कि कार्यक्रम की एक संपत्ति है, और कार्यक्रम के टेक्स्ट या निष्पादन में बिंदु से भिन्न होता है - लेक्सिकल देखें: एक सिंहावलोकन। इसके अतिरिक्त, वस्तु का जीवनकाल वेरिएबल्स जीवनकाल के साथ मेल खा सकता है, लेकिन कई स्थितियों में यह इससे बंधा नहीं है। | ||
स्कोप एक वेरिएबल के नाम | स्कोप एक वेरिएबल के नाम रिज़ॉल्यूशन का एक महत्वपूर्ण हिस्सा है। अधिकांश भाषाएं प्रत्येक वेरिएबल्स (साथ ही साथ किसी अन्य नामित इकाई) के लिए एक विशिष्ट दायरे को परिभाषित करती हैं, जो किसी दिए गए कार्यक्रम के भीतर भिन्न हो सकती हैं। एक वेरिएबल्स का दायरा कार्यक्रम के टेक्स्ट का वह भाग है जिसके लिए वेरिएबल्स के नाम का अर्थ है और जिसके लिए वेरिएबल्स को "दृश्यमान" कहा जाता है। उस दायरे में प्रवेश सामान्यतः एक वेरिएबल्स का जीवनकाल प्रारम्भ होता है (जैसा कि यह संदर्भ में आता है) और उस दायरे से बाहर निकलने से सामान्यतः इसका जीवनकाल समाप्त हो जाता है (क्योंकि यह संदर्भ से बाहर हो जाता है)। उदाहरण के लिए, "[[शाब्दिक गुंजाइश|लेक्सिकल स्कोप]]" वाला एक वेरिएबल केवल एक निश्चित फ़ंक्शन/[[सबरूटीन]] के भीतर ही अर्थपूर्ण है, या अभिव्यक्ति/कथनों के एक ब्लॉक के भीतर अधिक बारीक है (तदनुसार फ़ंक्शन स्कोप या ब्लॉक स्कोप के साथ); यह स्थिर रिज़ॉल्यूशन है, पार्स-टाइम या कंपाइल-टाइम पर प्रदर्शन योग्य है। वैकल्पिक रूप से, डायनेमिक स्कोप वाले वेरिएबल को रन-टाइम पर हल किया जाता है, जो ग्लोबल बाइंडिंग स्टैक पर आधारित होता है जो विशिष्ट नियंत्रण प्रवाह पर निर्भर करता है। वेरिएबल्स जो केवल एक निश्चित कार्यों के भीतर पहुंच योग्य हैं, उन्हें "[[स्थानीय चर|स्थानीय वेरिएबल्स]]" कहा जाता है। एक "[[वैश्विक चर|वैश्विक वेरिएबल्स]]", या एक अनिश्चित दायरे के साथ, कार्यक्रम में कहीं भी संदर्भित किया जा सकता है। | ||
दूसरी ओर, एक्स्टेंट, एक वैरिएबल का रनटाइम (डायनेमिक वेरिएबल स्कूपिंग#डायनेमिक स्कूपिंग) पहलू है। एक | दूसरी ओर, एक्स्टेंट, एक वैरिएबल का रनटाइम (डायनेमिक वेरिएबल स्कूपिंग#डायनेमिक स्कूपिंग) पहलू है। एक वेरिएबल्स के प्रत्येक नाम को एक मान से बाँधने के लिए रनटाइम पर उसकी अपनी सीमा हो सकती है। बाइंडिंग की सीमा प्रोग्राम के निष्पादन समय का वह भाग है जिसके समय वेरिएबल समान मान या मेमोरी स्थान को संदर्भित करता रहता है। एक रनिंग प्रोग्राम एक दी गई सीमा में कई बार प्रवेश कर सकता है और बंद हो सकता है, जैसा कि [[क्लोजर (कंप्यूटर साइंस)]] के स्थिति में होता है। | ||
जब तक प्रोग्रामिंग | जब तक प्रोग्रामिंग भाषा में [[कचरा संग्रह (कंप्यूटर विज्ञान)|कवेरिएबल्सा संग्रह (कंप्यूटर विज्ञान)]] नहीं होता है, तब तक एक वैरिएबल जिसकी सीमा स्थायी रूप से इसके दायरे से बाहर हो जाती है, एक [[स्मृति रिसाव|मेमोरी रिसाव]] हो सकती है, जिससे वेरिएबल के लिए आवंटित मेमोरी को कभी भी मुक्त नहीं किया जा सकता है, क्योंकि वेरिएबल का उपयोग इसे डीलोकेशन उद्देश्यों के लिए संदर्भित करने के लिए किया जाएगा। पहुंच योग्य। हालाँकि, यह एक वेरिएबल्स बंधन के लिए अपने दायरे से परे विस्तार करने के लिए अनुमत हो सकता है, जैसा कि लिस्प क्लोजर और सी स्थिर स्थानीय वेरिएबल्स में होता है; जब निष्पादन वेरिएबल्स के दायरे में वापस जाता है, तो वेरिएबल्स का एक बार फिर उपयोग किया जा सकता है। एक वेरिएबल जिसका दायरा उसकी सीमा से पहले प्रारम्भ होता है, उसे गैर-प्रारंभिक कहा जाता है और प्रायः एक अपरिभाषित, मनमाना मान होता है यदि एक्सेस किया जाता है (वाइल्ड पॉइंटर देखें), क्योंकि इसे अभी तक स्पष्ट रूप से एक विशेष मान नहीं दिया गया है। एक वेरिएबल जिसका दायरा उसके दायरे से पहले समाप्त हो जाता है, झूलने वाला सूचक बन सकता है और इसके मान के नष्ट हो जाने के बाद एक बार फिर से गैर-प्रारंभिक माना जाता है। पिछले दो स्थितियों द्वारा वर्णित वेरिएबल्स को सीमा से बाहर या अनबाउंड कहा जा सकता है। कई भाषाओं में, किसी वेरिएबल्स के मान का उपयोग करने का प्रयास करना एक त्रुटि है, जब वह सीमा से बाहर हो। अन्य भाषाओं में, ऐसा करने से अप्रत्याशित परिणाम मिल सकते हैं। हालाँकि, ऐसे वेरिएबल्स को एक नया मान दिया जा सकता है, जो इसे एक नई सीमा देता है। | ||
अंतरिक्ष दक्षता के लिए, एक | अंतरिक्ष दक्षता के लिए, एक वेरिएबल्स के लिए आवश्यक मेमोरी स्थान केवल तभी आवंटित किया जा सकता है जब वेरिएबल्स का पहली बार उपयोग किया जाता है और जब इसकी आवश्यकता नहीं होती है तो इसे मुक्त कर दिया जाता है। एक वेरिएबल्स की आवश्यकता तभी होती है जब वह दायरे में हो, इस प्रकार प्रत्येक वेरिएबल्स के जीवनकाल की प्रारम्भ जब वह दायरे में प्रवेश करता है तो अप्रयुक्त वेरिएबल्सों को स्थान दे सकता है। इस तरह के स्थान को बर्बाद करने से बचने के लिए, संकलक प्रायः प्रोग्रामर को चेतावनी देते हैं यदि एक वेरिएबल्स घोषित किया जाता है लेकिन उपयोग नहीं किया जाता है। | ||
यह अच्छा प्रोग्रामिंग अभ्यास माना जाता है कि वेरिएबल्स के दायरे को यथासंभव संकीर्ण बनाया जाए ताकि प्रोग्राम के विभिन्न भाग गलती से एक दूसरे के वेरिएबल्स को संशोधित करके एक दूसरे के साथ बातचीत न करें। ऐसा करने से भी दूरी | यह अच्छा प्रोग्रामिंग अभ्यास माना जाता है कि वेरिएबल्स के दायरे को यथासंभव संकीर्ण बनाया जाए ताकि प्रोग्राम के विभिन्न भाग गलती से एक दूसरे के वेरिएबल्स को संशोधित करके एक दूसरे के साथ बातचीत न करें। ऐसा करने से भी दूरी पर कार्रवाई रोकता है। ऐसा करने के लिए सामान्य तकनीकों में एक कार्यक्रम के विभिन्न वर्गों को अलग-अलग नाम स्थान का उपयोग करना है, या गतिशील वेरिएबल्स स्कूपिंग या [[गतिशील गुंजाइश|लेक्सिकल]] वेरिएबल स्कूपिंग के माध्यम से अलग-अलग वेरिएबल्स को "निजी" बनाना है। | ||
कई प्रोग्रामिंग भाषाएं एक अमान्य या गैर-प्रारंभिक | कई प्रोग्रामिंग भाषाएं एक अमान्य या गैर-प्रारंभिक वेरिएबल्स को इंगित करने के लिए एक आरक्षित मान (प्रायः शून्य सूचक या शून्य) का उपयोग करती हैं। | ||
== टाइपिंग == | == टाइपिंग == | ||
{{Main| | {{Main|टाइप सिस्टम}} | ||
{{See also|Datatype}} | {{See also|Datatype}} | ||
[[स्थिर टाइपिंग]] | [[स्थिर टाइपिंग]] भाषा की गई भाषाओं जैसे [[जाओ (प्रोग्रामिंग भाषा)|गो (प्रोग्रामिंग भाषा)]] या [[एमएल (प्रोग्रामिंग भाषा)]] में, एक वेरिएबल्स का भी एक प्रकार होता है, जिसका अर्थ है कि इसमें केवल कुछ प्रकार के मान ही संग्रहीत किए जा सकते हैं। उदाहरण के लिए, "पूर्णांक" प्रकार का एक वेरिएबल्स टेक्स्ट मानों को संग्रहीत करने से प्रतिबंधित है। | ||
[[गतिशील टाइपिंग]] | [[गतिशील टाइपिंग]] भाषा जैसे कि पायथन (प्रोग्रामिंग भाषा) में, एक वेरिएबल का प्रकार उसके मान से अनुमानित होता है, और उसके मान के अनुसार परिवर्तित कर सकता है। [[सामान्य लिस्प]] में, दोनों स्थितियाँ एक साथ सम्मिलित होती हैं: एक वेरिएबल्स को एक प्रकार दिया जाता है (यदि अघोषित है, तो इसे माना जाता है {{code|T}}, सार्वभौमिक उपप्रकार) जो संकलन समय पर सम्मिलित है। मानों के भी प्रकार होते हैं, जिन्हें रनटाइम पर चेक और क्वेरी किया जा सकता है। | ||
वेरिएबल्स की [[सबटाइपिंग]] भी प्रकार के बहुरूपता को संकलन समय पर हल करने की | वेरिएबल्स की [[सबटाइपिंग]] भी प्रकार के बहुरूपता को संकलन समय पर हल करने की स्वीकृति देती है। हालाँकि, यह ऑब्जेक्ट-ओरिएंटेड फ़ंक्शन कॉल्स ([[C++]] में [[आभासी कार्य]] के रूप में संदर्भित) में उपयोग किए जाने वाले बहुरूपता से अलग है, जो वैरिएबल के सुपरटाइप्स के विपरीत मान प्रकार के आधार पर कॉल को हल करता है। | ||
वेरिएबल्स | वेरिएबल्स प्रायः साधारण डेटा को स्टोर करते हैं, जैसे पूर्णांक और शाब्दिक तार, लेकिन कुछ प्रोग्रामिंग भाषा एक वैरिएबल को अन्य [[डेटा प्रकार]]्स के मानों को भी स्टोर करने की स्वीकृति देते हैं। ऐसी भाषाएं कार्यों को पैरामीट्रिक बहुरूपता # पैरामीट्रिक बहुरूपता होने में भी सक्षम कर सकती हैं। ये फ़ंक्शन कई प्रकार के डेटा का प्रतिनिधित्व करने के लिए वेरिएबल्स की तरह काम करते हैं। उदाहरण के लिए, नामित एक समारोह {{code|length}} सूची की लंबाई निर्धारित कर सकता है। इस तरह का एक {{code|length}} फ़ंक्शन अपने प्रकार के हस्ताक्षर में एक प्रकार के वेरिएबल्स को सम्मिलित करके पैरामीट्रिक बहुरूपी हो सकता है, क्योंकि सूची में तत्वों की संख्या तत्वों के प्रकार से स्वतंत्र है। | ||
== पैरामीटर == | == पैरामीटर == | ||
कार्यों के औपचारिक पैरामीटर (या औपचारिक तर्क) को | कार्यों के औपचारिक पैरामीटर (या औपचारिक तर्क) को वेरिएबल्स के रूप में भी संदर्भित किया जाता है। उदाहरण के लिए, इस पायथन (प्रोग्रामिंग भाषा) कोड सेगमेंट में, | ||
>>> def addtwo(x): | |||
... return x + 2 | |||
>>> def addtwo(x): | ... | ||
... | >>> addtwo(5) | ||
... | 7 | ||
>>> | नामित वेरिएबल्स {{code|x}} एक [[पैरामीटर (कंप्यूटर प्रोग्रामिंग)]] है क्योंकि फ़ंक्शन को कॉल करने पर इसे एक मान दिया जाता है। पूर्णांक 5 वह तर्क है जो देता है {{code|x}} इसका मान। अधिकांश भाषाओं में, फ़ंक्शन पैरामीटर का स्थानीय दायरा होता है। इस विशिष्ट वेरिएबल्स का नाम {{code|x}} के भीतर ही संदर्भित किया जा सकता है {{code|addtwo}} फ़ंक्शन (हालांकि निश्चित रूप से अन्य फ़ंक्शंस में वेरिएबल्स भी हो सकते हैं {{code|x}}). | ||
7 | |||
नामित | |||
== मेमोरी आवंटन == | == मेमोरी आवंटन == | ||
वेरिएबल्स आवंटन की विशिष्टता और उनके मानों का प्रतिनिधित्व व्यापक रूप से भिन्न होता है, दोनों प्रोग्रामिंग भाषाओं के बीच और किसी दिए गए भाषा के कार्यान्वयन के बीच। कई भाषा कार्यान्वयन स्थानीय वेरिएबल्सों के लिए स्थान आवंटित करते हैं, जिनकी सीमा [[कॉल स्टैक]] पर एकल फ़ंक्शन कॉल के लिए रहती है, और फ़ंक्शन के वापस आने पर जिनकी मेमोरी स्वचालित रूप से पुनः प्राप्त हो जाती है। सामान्यतः, नाम बंधन में, एक वेरिएबल्स का नाम मेमोरी में बाइट्स के कुछ विशेष ब्लॉक (समीपस्थ अनुक्रम) के एड्रेस से जुड़ा होता है, और वेरिएबल्स पर संचालन उस ब्लॉक में हेरफेर करता है। कोड संकलित होने पर उन वेरिएबल्सों के लिए संदर्भ अधिक सामान्य है जिनके मान बड़े या अज्ञात आकार के हैं। इस तरह के वेरिएबल्स मान को संग्रहीत करने के अतिरिक्त मान के स्थान को संदर्भित करते हैं, जिसे हीप नामक मेमोरी के पूल से आवंटित किया जाता है। | |||
बाउंड वेरिएबल्स के मान हैं। एक | बाउंड वेरिएबल्स के मान हैं। एक मान, हालांकि, एक अमूर्तता, एक विचार है; कार्यान्वयन में, एक मान को कुछ डेटा [[वस्तु (कंप्यूटर विज्ञान)]] द्वारा दर्शाया जाता है, जो कंप्यूटर मेमोरी में कहीं संग्रहीत होता है। प्रोग्राम, या रनटाइम पर्यावरण, को प्रत्येक डेटा ऑब्जेक्ट के लिए मेमोरी को अलग करना चाहिए और चूंकि मेमोरी परिमित है, यह सुनिश्चित करें कि यह मेमोरी पुन: उपयोग के लिए उपलब्ध है जब ऑब्जेक्ट को कुछ वेरिएबल्स के मान का प्रतिनिधित्व करने की आवश्यकता नहीं है। | ||
ढेर से आवंटित वस्तुओं को पुनः प्राप्त किया जाना चाहिए-खासकर जब वस्तुओं की आवश्यकता नहीं रह जाती है। एक | ढेर से आवंटित वस्तुओं को पुनः प्राप्त किया जाना चाहिए-खासकर जब वस्तुओं की आवश्यकता नहीं रह जाती है। एक कवेरिएबल्सा संग्रह (कंप्यूटर विज्ञान) में | कवेरिएबल्सा-संग्रहित भाषा (जैसे सी शार्प (प्रोग्रामिंग भाषा) | सी #, [[जावा (प्रोग्रामिंग भाषा)]], पायथन, गोलंग और [[लिस्प (प्रोग्रामिंग भाषा)]]), रनटाइम पर्यावरण स्वचालित रूप से वस्तुओं को पुनः प्राप्त करता है जब सम्मिलिता वेरिएबल्स अब उन्हें संदर्भित नहीं कर सकते। गैर-कवेरिएबल्सा-एकत्रित भाषाओं में, जैसे [[सी (प्रोग्रामिंग भाषा)]], प्रोग्राम (और प्रोग्रामर) को स्पष्ट रूप से मेमोरी को [[malloc]] करना चाहिए, और फिर बाद में इसे अपनी मेमोरी को पुनः प्राप्त करने के लिए मुक्त करना चाहिए। ऐसा करने में विफलता मेमोरी लीक की ओर ले जाती है, जिसमें प्रोग्राम के चलते हीप समाप्त हो जाता है, उपलब्ध मेमोरी समाप्त होने से अंततः विफलता का जोखिम होता है। | ||
जब एक | जब एक वेरिएबल्स गतिशील रूप से बनाई गई [[डेटा संरचना]] को संदर्भित करता है, तो इसके कुछ घटकों को वेरिएबल्स के माध्यम से अप्रत्यक्ष रूप से एक्सेस किया जा सकता है। ऐसी परिस्थितियों में, कवेरिएबल्सा संग्रहकर्ता (या कवेरिएबल्सा संग्रहकर्ताओं की कमी वाली भाषाओं में समान कार्यक्रम सुविधाओं) को ऐसे स्थिति से निपटना चाहिए जहां वेरिएबल्स से पहुंचने योग्य मेमोरी का केवल एक हिस्सा पुनः दावा किया जाना चाहिए। | ||
== नामकरण परंपराएं == | == नामकरण परंपराएं == | ||
{{Main| | {{Main|नामकरण अधिवेशन (प्रोग्रामिंग)}} | ||
{{See also|Identifier (computer languages)|Namespace}} | {{See also|Identifier (computer languages)|Namespace}} | ||
उनके गणितीय समकक्षों के विपरीत, प्रोग्रामिंग | उनके गणितीय समकक्षों के विपरीत, प्रोग्रामिंग वेरिएबल्स और स्थिरांक सामान्यतः बहु-वर्ण नाम लेते हैं, उदा। {{code|COST}} या {{code|total}}. एकल-वर्ण नाम सामान्यतः केवल सहायक वेरिएबल्स के लिए उपयोग किए जाते हैं; उदाहरण के लिए, {{code|i}}, {{code|j}}, {{code|k}} सरणी अनुक्रमणिका वेरिएबल्स के लिए। | ||
भाषा सिंटैक्स के हिस्से के रूप में कुछ नामकरण परंपराओं को भाषा स्तर पर | भाषा सिंटैक्स के हिस्से के रूप में कुछ नामकरण परंपराओं को भाषा स्तर पर प्रयुक्त किया जाता है जिसमें मान्य पहचानकर्ताओं का प्रारूप सम्मिलित होता है। लगभग सभी भाषाओं में, वेरिएबल नाम अंक (0–9) से प्रारम्भ नहीं हो सकते हैं और इसमें व्हाइटस्पेस वर्ण नहीं हो सकते हैं। वेरिएबल्स नामों में विराम चिह्नों की स्वीकृति है या नहीं, भाषा से भाषा में भिन्न होता है; कई भाषाएँ वेरिएबल्स नामों में केवल [[बल देना]] (_) की स्वीकृति देती हैं और अन्य सभी विराम चिह्नों को प्रतिबंधित करती हैं। कुछ प्रोग्रामिंग भाषाओं में, वेरिएबल के डेटाटाइप या स्कोप को इंगित करने के लिए वेरिएबल पहचानकर्ताओं के लिए [[सिगिल (कंप्यूटर प्रोग्रामिंग)]] एस (प्रतीक या विराम चिह्न) चिपकाए जाते हैं। | ||
वेरिएबल्स नामों की केस-संवेदनशीलता भी भाषाओं के बीच भिन्न होती है और कुछ भाषाओं को कुछ संस्थाओं के नामकरण में एक निश्चित स्थिति के उपयोग की आवश्यकता होती है;<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> | ||
प्रोग्रामर | प्रोग्रामर प्रायः कोड शैली दिशानिर्देशों का निर्माण करते हैं और उनका पालन करते हैं जो नामकरण वेरिएबल्स पर मार्गदर्शन प्रदान करते हैं या एक सटीक नामकरण योजना प्रयुक्त करते हैं। छोटे नाम टाइप करने में तेज़ होते हैं लेकिन कम वर्णनात्मक होते हैं; लंबे नाम प्रायः प्रोग्राम को पढ़ने में आसान बनाते हैं और वेरिएबल्स के उद्देश्य को समझना आसान बनाते हैं। हालाँकि, वेरिएबल्स नामों में अत्यधिक वाचालता भी कम बोधगम्य कोड का कारण बन सकती है। | ||
== | == वेरिएबल्स प्रकार (जीवनकाल पर आधारित) == | ||
हम | हम वेरिएबल्सों को उनके जीवनकाल के आधार पर वर्गीकृत कर सकते हैं। विभिन्न प्रकार के वेरिएबल्स स्थिर, स्टैक-डायनेमिक, स्पष्ट हीप-डायनामिक और निहित हीप-डायनामिक हैं। एक स्थिर वेरिएबल्स को वैश्विक वेरिएबल्स के रूप में भी जाना जाता है, यह निष्पादन प्रारम्भ होने से पहले एक मेमोरी सेल से जुड़ा होता है और समाप्ति तक उसी मेमोरी सेल में रहता है। एक विशिष्ट उदाहरण C और C++ में स्थिर वेरिएबल्स हैं। एक स्टैक-डायनेमिक वैरिएबल को लोकल वैरिएबल के रूप में जाना जाता है, जो डिक्लेरेशन स्टेटमेंट के निष्पादित होने पर बाध्य होता है, और जब प्रक्रिया वापस आती है तो इसे हटा दिया जाता है। मुख्य उदाहरण सी सबप्रोग्राम और जावा विधियों में स्थानीय वेरिएबल्स हैं। स्पष्ट ढेर-गतिशील वेरिएबल्स अज्ञात (अमूर्त) मेमोरी सेल हैं जो प्रोग्रामर द्वारा निर्दिष्ट स्पष्ट रन-टाइम निर्देशों द्वारा आवंटित और हटा दिए जाते हैं। मुख्य उदाहरण सी ++ (नए और डिलीट के माध्यम से) और जावा में सभी ऑब्जेक्ट्स में गतिशील वस्तुएं हैं। निहित हीप-डायनेमिक वेरिएबल्स केवल तभी भंडारण के लिए बाध्य होते हैं जब उन्हें मान निर्दिष्ट किया जाता है। आवंटन और रिलीज तब होता है जब मानों को वेरिएबल्स के लिए पुन: असाइन किया जाता है। नतीजतन, निहित ढेर-गतिशील वेरिएबल्स में लचीलेपन की उच्चतम डिग्री होती है। मुख्य उदाहरण जावास्क्रिप्ट, PHP और एपीएल में सभी वेरिएबल्स में कुछ वेरिएबल्स हैं। | ||
== यह भी देखें == | == यह भी देखें == | ||
{{Portal|Computer programming}} | {{Portal|Computer programming}} | ||
* [[नियंत्रण चर (प्रोग्रामिंग)]] | * [[नियंत्रण चर (प्रोग्रामिंग)|नियंत्रण वेरिएबल्स (प्रोग्रामिंग)]] | ||
* [[गैर-स्थानीय चर]] | * [[गैर-स्थानीय चर|गैर-स्थानीय वेरिएबल्स]] | ||
* [[अस्थायी चर]] | * [[अस्थायी चर|अस्थायी वेरिएबल्स]] | ||
* [[चर प्रक्षेप]] | * [[चर प्रक्षेप|वेरिएबल्स प्रक्षेप]] | ||
* [[अदिश (गणित)]] | * [[अदिश (गणित)]] | ||
==टिप्पणियाँ== | ==टिप्पणियाँ== | ||
{{Reflist|group=note}} | {{Reflist|group=note}} | ||
==संदर्भ== | ==संदर्भ== |
Revision as of 12:54, 26 February 2023
This article needs additional citations for verification. (November 2009) (Learn how and when to remove this template message) |
कंप्यूटर प्रोग्रामिंग में, एक वेरिएबल्स एक अमूर्त भंडारण स्थान है जो एक संबद्ध प्रतीक नाम के साथ जोड़ा जाता है, जिसमें एक मान के रूप में संदर्भित कुछ ज्ञात या अज्ञात मात्रा में जानकारी होती है; या सरल शब्दों में, एक वेरिएबल्स बिट्स या Data_type
(जैसे पूर्णांक (कंप्यूटर विज्ञान), फ्लोट, स्ट्रिंग (कंप्यूटर विज्ञान) आदि ...) के एक विशेष सेट के लिए एक नामित कंटेनर है। एक वेरिएबल्स अंततः मेमोरी एड्रेस से जुड़ा या पहचाना जा सकता है। वेरिएबल नाम संदर्भ (कंप्यूटर विज्ञान) के आधार पर वेरिएबल को संदर्भित करने के अतिरिक्त, संग्रहीत मान को संदर्भित करने का सामान्य तरीका है। नाम और सामग्री का यह पृथक्करण नाम को उस सटीक जानकारी से स्वतंत्र रूप से उपयोग करने की स्वीकृति देता है जिसका वह प्रतिनिधित्व करता है। कंप्यूटर स्रोत कोड में पहचानकर्ता रन टाइम के समय एक मान के लिए बाध्य हो सकता है, और वेरिएबल्स का मान इस प्रकार प्रोग्राम निष्पादन के समय परिवर्तित कर सकता है।।[1][2][3][4]
प्रोग्रामिंग में वेरिएबल्स सीधे गणित में वेरिएबल्स की अवधारणा के अनुरूप नहीं हो सकते हैं। उत्तरार्द्ध अमूर्त है, जिसमें भौतिक वस्तु जैसे भंडारण स्थान का कोई संदर्भ नहीं है। कंप्यूटिंग वेरिएबल्स का मान जरूरी नहीं कि गणित की तरह समीकरण या सूत्र का हिस्सा हो। कंप्यूटर प्रोग्रामिंग में वेरिएबल्स को उनके उपयोग के लिए अपेक्षाकृत वर्णनात्मक बनाने के लिए प्रायः लंबे नाम दिए जाते हैं, जबकि गणित में वेरिएबल्स में प्रायः ट्रांसक्रिप्शन और हेरफेर में संक्षिप्तता के लिए संक्षिप्त, एक या दो-अक्षर वाले नाम होते हैं।
एक वेरिएबल्स के भंडारण स्थान को कई अलग-अलग पहचानकर्ताओं द्वारा संदर्भित किया जा सकता है, इस स्थिति को अलियासिंग (कंप्यूटिंग) के रूप में जाना जाता है। पहचानकर्ताओं में से किसी एक का उपयोग करके वेरिएबल्स को मान निर्दिष्ट करने से वह मान परिवर्तित कर जाएगा जिसे अन्य पहचानकर्ताओं के माध्यम से एक्सेस किया जा सकता है।
कंपाइलर को वेरिएबल्स के प्रतीकात्मक नामों को डेटा के वास्तविक स्थानों से परिवर्तित करना होगा। जबकि एक वेरिएबल्स का नाम, प्रकार और स्थान प्रायः स्थिर रहता है, कार्यक्रम के निष्पादन के समय स्थान में संग्रहीत डेटा को परिवर्तित करा जा सकता है।
एक वेरिएबल्स पर क्रिया
अनिवार्य प्रोग्रामिंग भाषाओ में, मानों को सामान्यतः किसी भी समय एक्सेस या असाइनमेंट (कंप्यूटर विज्ञान) जा सकता है। शुद्ध कार्यात्मक प्रोग्रामिंग और तर्क प्रोग्रामिंग भाषाओं में, वेरिएबल्स अभिव्यक्ति के लिए बाध्य होते हैं और संदर्भित पारदर्शिता की आवश्यकताओं के कारण अपने पूरे जीवनकाल के समय एक ही मान रखते हैं। अनिवार्य भाषाओं में, समान व्यवहार (नामित) स्थिरांक (प्रतीकात्मक स्थिरांक) द्वारा प्रदर्शित किया जाता है, जो सामान्यतः (सामान्य) वेरिएबल्स के विपरीत होते हैं।
प्रोग्रामिंग भाषा के प्रकार प्रणाली के आधार पर, वेरिएबल्स केवल एक निर्दिष्ट डेटा प्रकार (जैसे पूर्णांक या स्ट्रिंग) को स्टोर करने में सक्षम हो सकते हैं। वैकल्पिक रूप से, एक डेटाटाइप केवल वर्तमान मान के साथ जुड़ा हो सकता है, जिससे एकल वेरिएबल्स को प्रोग्रामिंग भाषा द्वारा समर्थित कुछ भी स्टोर करने की स्वीकृति मिलती है।
वेरिएबल्स मानों को संग्रहित करने के लिए कंटेनर हैं।
वेरिएबल्स और दायरा:
- स्वचालित वेरिएबल्स: किसी फ़ंक्शन में प्रत्येक स्थानीय वेरिएबल्स तभी अस्तित्व में आता है जब फ़ंक्शन को कॉल किया जाता है, शुद्ध समारोह के बाहर निकलने पर गायब हो जाता है। ऐसे वेरिएबल्स को स्वचालित वेरिएबल्स के रूप में जाना जाता है।
- बाहरी वेरिएबल्स: ये वे वेरिएबल्स हैं जो किसी फ़ंक्शन के बाहरी हैं और किसी भी फ़ंक्शन द्वारा नाम से एक्सेस किए जा सकते हैं। ये वेरिएबल्स स्थायी रूप से अस्तित्व में रहते हैं; बल्कि यह कि कार्यों को बुलाए जाने और बाहर निकलने के रूप में प्रकट होने और गायब होने के कारण, वे उन कार्यों के बाद भी अपने मानों को बनाए रखते हैं जो उन्हें सेट करते हैं।
एक वेरिएबल्स का संदर्भ देने वाले पहचानकर्ता
एक वेरिएबल्स को संदर्भित करने वाले एक पहचानकर्ता का उपयोग मान को पढ़ने, या मान को परिवर्तित करने, या वेरिएबल्स के अन्य गुण (कंप्यूटिंग) को संपादित करने के लिए वेरिएबल्स का उपयोग करने के लिए किया जा सकता है, जैसे एक्सेस स्वीकृति, लॉक (कंप्यूटर विज्ञान), सेमाफोर (प्रोग्रामिंग) ), वगैरह।
उदाहरण के लिए, एक वेरिएबल्स को पहचानकर्ता द्वारा संदर्भित किया जा सकता हैtotal_count
और वेरिएबल में 1956 नंबर हो सकता है। यदि उसी वेरिएबल को पहचानकर्ता द्वारा संदर्भित किया जाता हैr
साथ ही, और यदि इस पहचानकर्ता का उपयोग कर रहे हैंr
, वेरिएबल्स का मान 2009 में परिवर्तित कर दिया गया है, फिर पहचानकर्ता का उपयोग करके मान पढ़नाtotal_count
2009 का परिणाम मिलेगा न कि 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 और एपीएल में सभी वेरिएबल्स में कुछ वेरिएबल्स हैं।
यह भी देखें
- नियंत्रण वेरिएबल्स (प्रोग्रामिंग)
- गैर-स्थानीय वेरिएबल्स
- अस्थायी वेरिएबल्स
- वेरिएबल्स प्रक्षेप
- अदिश (गणित)
टिप्पणियाँ
संदर्भ
- ↑ Compilers: Principles, Techniques, and Tools, pp. 26–28
- ↑ Knuth, Donald (1997). The Art of Computer Programming. Vol. 1 (3rd ed.). Reading, Massachusetts: Addison-Wesley. pp. 3–4. ISBN 0-201-89683-4.
- ↑ "Programming with variables". Khan Academy. Retrieved 23 March 2020.
- ↑ "Scratch for Budding Coders". Harvard. Retrieved 23 March 2020.
- ↑ How Not To Pick Variables, Retrieved July 11, 2012 [DEAD LINK]
- ↑ Edsger Dijkstra, To hell with "meaningful identifiers"!