स्थिरांक (कंप्यूटर प्रोग्रामिंग): Difference between revisions

From Vigyanwiki
No edit summary
Line 71: Line 71:
इस विशेषता के अलावा, C++ में किसी कार्य या विधि को इस रूप में घोषित करना भी संभव है {{Cpp|const}}. यह ऐसे कार्यों या विधियों को स्थानीय चर के अलावा कुछ भी संशोधित करने से रोकता है।
इस विशेषता के अलावा, C++ में किसी कार्य या विधि को इस रूप में घोषित करना भी संभव है {{Cpp|const}}. यह ऐसे कार्यों या विधियों को स्थानीय चर के अलावा कुछ भी संशोधित करने से रोकता है।


सी # में, कीवर्ड {{C sharp|const}} मौजूद है, लेकिन फ़ंक्शन पैरामीटर के लिए समान प्रभाव नहीं है, जैसा कि C/C++ में होता है। हालाँकि, जाँच करने के लिए कंपाइलर को हिलाने का एक तरीका है, हालाँकि यह थोड़ा मुश्किल है।<ref>
C # में, कीवर्ड {{C sharp|const}} मौजूद है, लेकिन फ़ंक्शन पैरामीटर के लिए समान प्रभाव नहीं है, जैसा कि C/C++ में होता है। हालाँकि, जाँच करने के लिए कंपाइलर को हिलाने का एक तरीका है, हालाँकि यह थोड़ा मुश्किल है।<ref>
{{cite web
{{cite web
| accessdate = 2012-05-06
| accessdate = 2012-05-06
Line 80: Line 80:
| quote      = [...] Then you can declare methods whose parameter type “tells” whether it plans on changing the variable or not:. [...] This mimics compile-time checks similar to constness in C++. As Eric Lippert correctly pointed out, this is not the same as immutability. But as a C++ programmer I think you know that.
| quote      = [...] Then you can declare methods whose parameter type “tells” whether it plans on changing the variable or not:. [...] This mimics compile-time checks similar to constness in C++. As Eric Lippert correctly pointed out, this is not the same as immutability. But as a C++ programmer I think you know that.
| url        = https://stackoverflow.com/a/3826657/}}
| url        = https://stackoverflow.com/a/3826657/}}
</ref>
</ref> समान प्रभाव प्राप्त करने के लिए, पहले दो [[इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] परिभाषित किए गए हैं
समान प्रभाव प्राप्त करने के लिए, पहले दो [[इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] परिभाषित किए गए हैं


<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
Line 118: Line 117:
}
}
</syntaxhighlight>
</syntaxhighlight>
== वस्तु-उन्मुख स्थिरांक ==
== वस्तु-उन्मुख स्थिरांक ==
एक स्थिरांक डेटा संरचना या वस्तु को वस्तु-उन्मुख भाषा में अपरिवर्तनीय वस्तु के रूप में संदर्भित किया जाता है। एक वस्तु का अपरिवर्तनीय होना प्रोग्राम डिजाइन में कुछ लाभ प्रदान करता है। उदाहरण के लिए, इसके पॉइंटर या संदर्भ को कॉपी करके, समय लेने वाली कॉपी ऑपरेशन से बचने और मेमोरी को संरक्षित करके इसे कॉपी किया जा सकता है।
एक स्थिरांक डेटा संरचना या वस्तु को वस्तु-उन्मुख भाषा में अपरिवर्तनीय वस्तु के रूप में संदर्भित किया जाता है। एक वस्तु का अपरिवर्तनीय होना प्रोग्राम डिजाइन में कुछ लाभ प्रदान करता है। उदाहरण के लिए, इसके पॉइंटर या संदर्भ को कॉपी करके, समय लेने वाली कॉपी ऑपरेशन से बचने और मेमोरी को संरक्षित करके इसे कॉपी किया जा सकता है।
Line 138: Line 135:
i = 4; // Error! Cannot modify a "final" object
i = 4; // Error! Cannot modify a "final" object
</syntaxhighlight>
</syntaxhighlight>
यह संकलक द्वारा निर्णायक होना चाहिए जहां चर के साथ {{Java|final}} मार्कर प्रारंभ किया गया है, और इसे केवल एक बार किया जाना चाहिए, या कक्षा संकलित नहीं होगी। जावा का {{Java|final}} और सी++ {{Cpp|const}} आदिम चर के साथ लागू होने पर कीवर्ड का एक ही अर्थ होता है।
यह संकलक द्वारा निर्णायक होना चाहिए जहां चर के साथ {{Java|final}} मार्कर प्रारंभ किया गया है, और इसे केवल एक बार किया जाना चाहिए, या कक्षा संकलित नहीं होगी। जावा का {{Java|final}} और C++ {{Cpp|const}} आदिम चर के साथ लागू होने पर कीवर्ड का एक ही अर्थ होता है।


<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
Line 144: Line 141:
i = 4; // Error!
i = 4; // Error!
</syntaxhighlight>
</syntaxhighlight>
<nowiki>संकेतकों को ध्यान में रखते हुए, ए {{Java|final}जावा में } संदर्भ का अर्थ कुछ समान है </nowiki>{{Cpp|const}} सी ++ में सूचक। सी ++ में, कोई स्थिरांक सूचक प्रकार घोषित कर सकता है।
<nowiki>संकेतकों को ध्यान में रखते हुए, ए {{Java|final}जावा में } संदर्भ का अर्थ कुछ समान है </nowiki>{{Cpp|const}} C ++ में सूचक C++ में, कोई स्थिरांक सूचक प्रकार घोषित कर सकता है।


<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
Foo *const bar = mem_location; // const pointer type
Foo *const bar = mem_location; // const pointer type
</syntaxhighlight>
</syntaxhighlight>
यहाँ, {{Cpp|bar}} को घोषणा के समय प्रारंभ किया जाना चाहिए और इसे फिर से नहीं बदला जा सकता है, लेकिन यह जो इंगित करता है वह संशोधित है। अर्थात। {{Cpp|*bar {{=}} value}} यह सही है। यह किसी अन्य स्थान की ओर इशारा नहीं कर सकता है। जावा में अंतिम संदर्भ उसी तरह काम करते हैं, सिवाय इसके कि उन्हें गैर-प्रारंभिक घोषित किया जा सकता है।
यहाँ, {{Cpp|bar}} को घोषणा के समय प्रारंभ किया जाना चाहिए और इसे फिर से नहीं बदला जा सकता है, लेकिन यह जो इंगित करता है वह संशोधित है। अर्थात {{Cpp|*bar {{=}} value}} यह सही है। यह किसी अन्य स्थान की ओर इशारा नहीं कर सकता है। जावा में अंतिम संदर्भ उसी तरह काम करते हैं, सिवाय इसके कि उन्हें गैर-प्रारंभिक घोषित किया जा सकता है।


<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
final Foo i; // a Java declaration
final Foo i; // a Java declaration
</syntaxhighlight>
</syntaxhighlight>
नोट: जावा पॉइंटर्स का समर्थन नहीं करता है।<ref>{{cite web|url=http://java.sun.com/docs/white/langenv/Simple.doc2.html#4107 |title=Oracle Technology Network for Java Developers &#124; Oracle Technology Network &#124; Oracle |publisher=Java.sun.com |date=2013-08-14 |accessdate=2013-08-18}}</ref>
नोट: जावा पॉइंटर्स का समर्थन नहीं करता है।<ref>{{cite web|url=http://java.sun.com/docs/white/langenv/Simple.doc2.html#4107 |title=Oracle Technology Network for Java Developers &#124; Oracle Technology Network &#124; Oracle |publisher=Java.sun.com |date=2013-08-14 |accessdate=2013-08-18}}</ref> ऐसा इसलिए है क्योंकि पॉइंटर (कंप्यूटर प्रोग्रामिंग) जावा (प्रतिबंधों के साथ) जावा में ऑब्जेक्ट तक पहुंचने का डिफ़ॉल्ट तरीका है, और जावा उन्हें इंगित करने के लिए सितारों का उपयोग नहीं करता है। उदाहरण के लिए, {{mono|i}} पिछले उदाहरण में एक सूचक है और उदाहरण का उपयोग करने के लिए इस्तेमाल किया जा सकता है।
ऐसा इसलिए है क्योंकि पॉइंटर (कंप्यूटर प्रोग्रामिंग) # जावा (प्रतिबंधों के साथ) जावा में ऑब्जेक्ट तक पहुंचने का डिफ़ॉल्ट तरीका है, और जावा उन्हें इंगित करने के लिए सितारों का उपयोग नहीं करता है। उदाहरण के लिए, {{mono|i}} पिछले उदाहरण में एक सूचक है और उदाहरण का उपयोग करने के लिए इस्तेमाल किया जा सकता है।


C++ में केवल-पढ़ने के लिए डेटा के लिए पॉइंटर भी घोषित किया जा सकता है।
C++ में केवल-पढ़ने के लिए डेटा के लिए पॉइंटर भी घोषित किया जा सकता है।
Line 172: Line 168:


===सी#===
===सी#===
सी शार्प (प्रोग्रामिंग लैंग्वेज) में | सी #, क्वालीफायर {{C sharp|readonly}} का डेटा सदस्यों पर समान प्रभाव पड़ता है {{Java|final}} जावा में करता है और {{Cpp|const}} C++ में करता है; संशोधक {{C sharp|const}} के समान प्रभाव (अभी तक टाइप किया गया और वर्ग-दायरा) है {{Cpp|#define}} सी ++ में। जावा का अन्य, वंशानुक्रम-अवरोधक प्रभाव {{Java|final}} जब विधियों और कक्षाओं पर लागू किया जाता है तो कीवर्ड की सहायता से सी # में प्रेरित होता है {{C sharp|sealed}}.
सी # में, क्वालीफायर {{C sharp|readonly}} का डेटा सदस्यों पर वही प्रभाव पड़ता है जो जावा में {{Java|final}}करता है और C++ में {{Cpp|const}} करता है; संशोधक {{C sharp|const}} का प्रभाव C++ में {{Cpp|#define}} के समान (अभी तक टाइप किया गया और वर्ग-दायरा) है। विधियों और कक्षाओं पर लागू होने पर जावा के {{Java|final}}का अन्य, इनहेरिटेंस-इनहिबिटिंग प्रभाव C # में कीवर्ड {{C sharp|sealed}} की सहायता से प्रेरित होता है।


सी ++ के विपरीत, सी # विधियों और पैरामीटर को चिह्नित करने की अनुमति नहीं देता है {{C sharp|const}}. हालाँकि, कोई भी रीड-ओनली उप-वर्गों को पार कर सकता है, और .NET फ्रेमवर्क अपरिवर्तनीय संग्रहों को अपरिवर्तनीय संग्रहों में परिवर्तित करने के लिए कुछ सहायता प्रदान करता है, जिन्हें केवल-पढ़ने के लिए रैपर के रूप में पारित किया जा सकता है।
सी ++ के विपरीत, सी # विधि और पैरामीटर को {{C sharp|const}} के रूप में चिह्नित करने की अनुमति नहीं देता है। हालाँकि, कोई भी रीड-ओनली उप-वर्गों को पार कर सकता है, और .NET फ्रेमवर्क अपरिवर्तनीय संग्रहों को अपरिवर्तनीय संग्रहों में परिवर्तित करने के लिए कुछ समर्थन प्रदान करता है जिन्हें केवल-पढ़ने के लिए रैपर के रूप में पारित किया जा सकता है।


== प्रतिमान द्वारा ==
== प्रतिमान द्वारा ==
[[प्रोग्रामिंग प्रतिमान]] द्वारा स्थिरांक का उपचार महत्वपूर्ण रूप से भिन्न होता है। कॉन्स्ट-शुद्धता सी ++ जैसी अनिवार्य भाषाओं में एक मुद्दा है क्योंकि डिफ़ॉल्ट [[नाम बंधन]] आमतौर पर वेरिएबल (कंप्यूटर विज्ञान) बनाते हैं, जो अलग-अलग हो सकते हैं, जैसा कि नाम से पता चलता है, और इस प्रकार यदि कोई बाध्यकारी को स्थिर के रूप में चिह्नित करना चाहता है तो इसके लिए कुछ अतिरिक्त संकेत की आवश्यकता होती है .{{efn|This is not universal: in Ada input parameters and loop parameters are implicitly constant, for instance.}} अन्य प्रोग्रामिंग भाषा में प्रतिमानों से संबंधित समस्याएँ उत्पन्न होती हैं, जिनमें स्थिरांक-शुद्धता के कुछ अनुरूप पाए जाते हैं।
[[प्रोग्रामिंग प्रतिमान]] के अनुसार स्थिरांक का उपचार काफी भिन्न होता है। कॉन्स्ट-शुद्धता C++ जैसी अनिवार्य भाषाओं में एक मुद्दा है क्योंकि डिफ़ॉल्ट नाम बाइंडिंग आमतौर पर चर बनाते हैं, जो भिन्न हो सकते हैं, जैसा कि नाम से पता चलता है, और इस प्रकार यदि कोई बाध्यकारी को निरंतर चिह्नित करना चाहता है तो इसके लिए कुछ अतिरिक्त संकेत की आवश्यकता होती है।{{efn|This is not universal: in Ada input parameters and loop parameters are implicitly constant, for instance.}} अन्य प्रोग्रामिंग लैंग्वेज प्रतिमानों में संबंधित मुद्दे उत्पन्न होते हैं, जिनमें कॉन्स्ट-करेक्टनेस के कुछ एनालॉग्स पाए जाते हैं।


कार्यात्मक प्रोग्रामिंग में, डेटा आमतौर पर डिफ़ॉल्ट रूप से चर के बजाय डिफ़ॉल्ट रूप से स्थिर होता है। एक चर (एक नाम और संभावित चर मान के साथ एक भंडारण स्थान) के लिए एक मान निर्दिष्ट करने के बजाय, एक नाम के लिए एक मूल्य के लिए एक बंधन बनाता है, जैसे कि {{code|lang=scheme|let}} [[ लिस्प (प्रोग्रामिंग भाषा) ]] की कई बोलियों में निर्माण। कुछ कार्यात्मक भाषाओं में, विशेष रूप से बहु-प्रतिमान वाले जैसे कि [[ सामान्य लिस्प ]], डेटा को संशोधित करना सामान्य है, जबकि अन्य में इसे टाला जाता है या असाधारण माना जाता है; यह स्कीम (प्रोग्रामिंग लैंग्वेज) (एक अन्य लिस्प बोली) का मामला है, जो {{code|lang=scheme|set!}} डेटा को संशोधित करने के लिए निर्माण, के साथ {{mono|!}} विस्मयादिबोधक चिह्न इस ओर ध्यान आकर्षित करता है। ऐसी भाषाएँ डिफ़ॉल्ट रूप से स्थिरांक-शुद्धता के लक्ष्यों को प्राप्त करती हैं, स्थिरता के बजाय संशोधन पर ध्यान आकर्षित करती हैं।
कार्यात्मक प्रोग्रामिंग में, डेटा आमतौर पर डिफ़ॉल्ट रूप से स्थिर होता है, बजाय डिफ़ॉल्ट रूप से चर के। एक चर (एक नाम और संभावित चर मान के साथ एक भंडारण स्थान) के लिए एक मान निर्दिष्ट करने के बजाय, एक मूल्य के लिए एक नाम का बंधन बनाता है, जैसे कि {{code|lang=scheme|let}} लिस्प की कई बोलियों में निर्माण। कुछ कार्यात्मक भाषाओं में, विशेष रूप से बहु-प्रतिमान जैसे कि कॉमन लिस्प में, डेटा को संशोधित करना सामान्य है, जबकि अन्य में इसे टाला जाता है या असाधारण माना जाता है; यह स्कीम (एक अन्य लिस्प बोली) का मामला है, जो {{code|lang=scheme|set!}}का उपयोग करता है! डेटा को संशोधित करने के लिए निर्माण, के साथ ! विस्मयादिबोधक बिंदु इस ओर ध्यान आकर्षित करता है। ऐसी भाषाएं डिफ़ॉल्ट रूप से स्थिरांक-शुद्धता के लक्ष्यों को प्राप्त करती हैं, निरंतरता के बजाय संशोधन पर ध्यान आकर्षित करती हैं।


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


कुछ बहुप्रतिमान भाषाओं में जो वस्तु-उन्मुख और कार्यात्मक शैलियों दोनों की अनुमति देती हैं, इन दोनों विशेषताओं को जोड़ा जा सकता है। उदाहरण के लिए, [[OCaml]] में ऑब्जेक्ट फ़ील्ड डिफ़ॉल्ट रूप से अपरिवर्तनीय हैं और उन्हें स्पष्ट रूप से कीवर्ड के साथ चिह्नित किया जाना चाहिए {{OCaml|mutable}} उत्परिवर्तनीय होने के लिए, जबकि स्काला में, बाइंडिंग स्पष्ट रूप से अपरिवर्तनीय होती है जब इसे परिभाषित किया जाता है {{code|lang=scala|val}} मूल्य के लिए और परिभाषित होने पर स्पष्ट रूप से परिवर्तनशील {{code|lang=scala|var}} चर के लिए।
कुछ बहु-प्रतिमान भाषाओं में जो ऑब्जेक्ट-ओरिएंटेड और कार्यात्मक शैलियों दोनों की अनुमति देती हैं, इन दोनों सुविधाओं को जोड़ा जा सकता है। उदाहरण के लिए, [[OCaml]] में ऑब्जेक्ट फ़ील्ड डिफ़ॉल्ट रूप से अपरिवर्तनीय हैं और स्पष्ट रूप से म्यूटेबल होने के लिए कीवर्ड {{OCaml|mutable}} के साथ चिह्नित होना चाहिए, जबकि स्काला में, बाइंडिंग स्पष्ट रूप से अपरिवर्तनीय हैं जब "वैल्यू" के लिए {{code|lang=scala|val}} के साथ परिभाषित किया गया है और स्पष्ट रूप से म्यूटेबल है जब "वैरिएबल" के लिए {{code|lang=scala|var}} के साथ परिभाषित किया गया है "।


== नामकरण परंपराएं ==
== नामकरण परंपराएं ==
स्थिरांकों के लिए नामकरण परिपाटी (प्रोग्रामिंग) अलग-अलग होती है। कुछ बस उन्हें उसी तरह नाम देते हैं जैसे वे किसी अन्य चर को देते हैं। अन्य लोग स्थिरांक के लिए राजधानियों और अंडरस्कोर का उपयोग प्रतीकात्मक मैक्रोज़ के लिए अपने पारंपरिक उपयोग के समान करते हैं, जैसे कि {{code|SOME_CONSTANT}}.<ref>[http://msdn.microsoft.com/en-us/library/aa188468(office.10).aspx Microsoft Office XP Developer: Constant Names]</ref> [[ हंगेरियन संकेतन ]] में, k [[उपसर्ग]] स्थिरांक के साथ-साथ मैक्रो (कंप्यूटर विज्ञान) और [[प्रगणित प्रकार]]ों को दर्शाता है।
स्थिरांकों के लिए नामकरण परिपाटी भिन्न होती है। कुछ बस उन्हें उसी तरह नाम देते हैं जैसे वे किसी अन्य चर को देते हैं। अन्य लोग स्थिरांक के लिए राजधानियों और अंडरस्कोर का उपयोग प्रतीकात्मक मैक्रोज़ के लिए अपने पारंपरिक उपयोग के समान करते हैं, जैसे {{code|SOME_CONSTANT}}<ref>[http://msdn.microsoft.com/en-us/library/aa188468(office.10).aspx Microsoft Office XP Developer: Constant Names]</ref> [[ हंगेरियन संकेतन |हंगेरियन संकेतन]] में, एक "k" उपसर्ग स्थिरांक के साथ-साथ मैक्रोज़ और [[प्रगणित प्रकार|प्रगणित]] प्रकारों को दर्शाता है।


एक लागू परिपाटी यह है कि [[रूबी (प्रोग्रामिंग भाषा)]] में, कोई भी वेरिएबल जो एक बड़े अक्षर से शुरू होता है, एक स्थिरांक माना जाता है, जिसमें वर्ग के नाम भी शामिल हैं।
एक लागू अभिसमय यह है कि [[रूबी (प्रोग्रामिंग भाषा)|रूबी]] में, कोई भी वेरिएबल जो बड़े अक्षर से शुरू होता है, एक स्थिरांक माना जाता है, जिसमें वर्ग नाम भी शामिल हैं।


== यह भी देखें ==
== यह भी देखें ==
* IBM/360 और Z/आर्किटेक्चर प्लेटफॉर्म के लिए [[पता स्थिरांक]]
* आईबीएम/360 और जेड/आर्किटेक्चर प्लेटफॉर्म के लिए एड्रेस कॉन्सटेंट


==टिप्पणियाँ==
==टिप्पणियाँ==
{{notelist|30em}}
{{notelist|30em}}
==संदर्भ==
==संदर्भ==
{{Reflist|30em}}
{{Reflist|30em}}
<!-- e.g., pi() -->


{{DEFAULTSORT:Constant (Programming)}}
{{DEFAULTSORT:Constant (Programming)}}

Revision as of 15:09, 2 June 2023

कंप्यूटर प्रोग्रामिंग में, स्थिरांक एक मान है जिसे सामान्य निष्पादन के दौरान कार्यक्रम द्वारा परिवर्तित नहीं किया जाना चाहिए, अर्थात, मान स्थिर है।[lower-alpha 1] जब एक पहचानकर्ता के साथ जुड़ा होता है, तो एक स्थिरांक को "नामित" कहा जाता है, हालांकि "स्थिर" और "नामांकित स्थिरांक" शब्द अक्सर परस्पर विनिमय के लिए उपयोग किए जाते हैं। यह एक चर के साथ विपरीत है, जो एक मान के साथ पहचानकर्ता है जिसे सामान्य निष्पादन के दौरान बदला जा सकता है, अर्थात, मान एक चर (वेरिएबल) है।

प्रोग्रामर और कंपाइलर दोनों के लिए स्थिरांक उपयोगी होते हैं: प्रोग्रामर के लिए, वे स्व-दस्तावेजीकरण कोड का एक रूप होते हैं और शुद्धता के बारे में तर्क देते हैं, जबकि कंपाइलर्स के लिए वे कंपाइल-टाइम और रन-टाइम चेक की अनुमति देते हैं जो यह सत्यापित करते हैं कि कॉन्स्टेंसी मान्यताओं का उल्लंघन नहीं किया गया है, और कुछ कंपाइलर ऑप्टिमाइज़ेशन को अनुमति या सरलीकृत करते हैं।

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

संकलन-समय स्थिरांक के विशिष्ट उदाहरणों में गणितीय स्थिरांक, मानकों से मान (यहाँ अधिकतम संचरण इकाई), या आंतरिक विन्यास मान (यहाँ प्रति पंक्ति वर्ण) शामिल हैं, जैसे कि ये C उदाहरण:

const float PI = 3.1415927;  // maximal single float precision
const unsigned int MTU = 1500;  // Ethernet v2, RFC 894
const unsigned int COLUMNS = 80;

रन-टाइम स्थिरांक के विशिष्ट उदाहरण किसी फ़ंक्शन के इनपुट के आधार पर गणना किए गए मान हैं, जैसे कि यह C++ उदाहरण:

void f(std::string s) {
  const size_t l = s.length();
  // ...
}

प्रयोग

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

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

शाब्दिक और मैक्रोज़ के साथ तुलना

डेटा मान को व्यक्त करने के कई मुख्य तरीके हैं जो प्रोग्राम के निष्पादन के दौरान नहीं बदलते हैं और जो विभिन्न प्रकार की प्रोग्रामिंग भाषाओं में सुसंगत है। एक बहुत ही बुनियादी तरीका प्रोग्राम कोड में केवल शाब्दिक संख्या, वर्ण या स्ट्रिंग लिखना है, जो C, C ++ और समान भाषाओं में सीधा है।

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

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

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

ये स्थिरांक कई मायनों में शाब्दिक से भिन्न होते हैं। कंपाइलर्स आम तौर पर मैक्रो के साथ निष्पादन योग्य भर में फैलाने के बजाय प्रतीक द्वारा पहचाने गए एकल स्मृति स्थान में निरंतर स्थान रखते हैं। हालांकि यह तत्काल मोड के गति लाभ को रोकता है, स्मृति दक्षता में लाभ हैं, और डीबगर इन स्थिरांकों के साथ रनटाइम पर काम कर सकते हैं। इसके अलावा मैक्रोज़ को सी और C ++ में विरोधाभासी शीर्षलेख फ़ाइलों द्वारा आकस्मिक रूप से फिर से परिभाषित किया जा सकता है, लेकिन विरोधाभासी स्थिरांक संकलन समय पर पाए जाते हैं।

भाषा के आधार पर, स्थिरांक अलिखित या टाइप किए जा सकते हैं। C और C ++ में, मैक्रोज़ पूर्व प्रदान करते हैं, जबकि const बाद वाले को प्रदान करता है:

#define PI 3.1415926535

const float pi2 = 3.1415926535;

जबकि एडा में, सार्वभौमिक संख्यात्मक प्रकार होते हैं जिनका उपयोग वांछित होने पर किया जा सकता है:

pi : constant := 3.1415926535;

pi2 : constant float := 3.1415926535;

अप्रकाशित संस्करण को प्रत्येक उपयोग पर उपयुक्त प्रकार में स्पष्ट रूप से परिवर्तित किया जा रहा है।[2]

गतिशील रूप से मूल्यवान स्थिरांक

ऊपर वर्णित स्थैतिक स्थिरांक के अलावा, कई प्रक्रियात्मक भाषाएँ जैसे कि एडा और C++ वैश्विक चरों की ओर निरंतरता की अवधारणा का विस्तार करती हैं जो आरंभिक समय पर बनाए जाते हैं, स्थानीय चर जो स्टैक पर या रजिस्टरों में स्वचालित रूप से रनटाइम पर बनाए जाते हैं, डायनेमिक रूप से आबंटित मेमोरी जिसे पॉइंटर द्वारा एक्सेस किया जाता है, और फ़ंक्शन हेडर में पैरामीटर सूची में।

गतिशील रूप से मूल्यवान स्थिरांक एक चर को स्मृति के एक विशिष्ट क्षेत्र में रहने के रूप में नामित नहीं करते हैं, न ही संकलन समय पर मान निर्धारित किए जाते हैं। C++ कोड जैसे

float func(const float ANYTHING) {
    const float XYZ = someGlobalVariable*someOtherFunction(ANYTHING);
    ...
}

अभिव्यक्ति है कि स्थिरांक को आरंभीकृत किया जाता है, वे स्वयं स्थिर नहीं होते हैं। कार्यक्रम की वैधता या शब्दार्थ शुद्धता के लिए यहाँ स्थिरांकता का उपयोग आवश्यक नहीं है, लेकिन इसके तीन फायदे हैं:

  1. पाठक को यह स्पष्ट है कि एक बार सेट हो जाने के बाद वस्तु को और संशोधित नहीं किया जाएगा
  2. ऑब्जेक्ट के मूल्य को बदलने का प्रयास (बाद के प्रोग्रामर जो प्रोग्राम लॉजिक को पूरी तरह से नहीं समझते हैं) को कंपाइलर द्वारा अस्वीकार कर दिया जाएगा
  3. कंपाइलर यह जानकर कोड ऑप्टिमाइज़ेशन करने में सक्षम हो सकता है कि एक बार बनने के बाद ऑब्जेक्ट का मान नहीं बदलेगा।[3]

गतिशील रूप से मूल्यवान स्थिरांक ALGOL 68 के साथ एक भाषा सुविधा के रूप में उत्पन्न हुए।[3]एडीए और सी ++ कोड के अध्ययन से पता चला है कि गतिशील रूप से मूल्यवान स्थिरांक आमतौर पर 1% या उससे कम वस्तुओं के लिए उपयोग किए जाते हैं, जब उनका अधिक उपयोग किया जा सकता है, क्योंकि कुछ 40-50% स्थानीय, गैर-वर्ग वस्तुएं वास्तव में एक बार अपरिवर्तनीय होती हैं। बनाया था।[3][4] दूसरी ओर, इस तरह के अपरिवर्तनीय चर कार्यात्मक प्रोग्रामिंग में डिफ़ॉल्ट होते हैं क्योंकि वे बिना किसी दुष्प्रभाव (जैसे, पुनरावर्तन) के साथ प्रोग्रामिंग शैलियों का पक्ष लेते हैं या अधिकांश घोषणाओं को डिफ़ॉल्ट रूप से अपरिवर्तनीय बनाते हैं, जैसे एमएल (प्रोग्रामिंग भाषा)विशुद्ध रूप से कार्यात्मक प्रोग्रामिंग भाषाएं साइड-इफेक्ट्स को पूरी तरह से मना करती हैं।

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

लगातार फ़ंक्शन पैरामीटर

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

इस विशेषता के अलावा, C++ में किसी कार्य या विधि को इस रूप में घोषित करना भी संभव है const. यह ऐसे कार्यों या विधियों को स्थानीय चर के अलावा कुछ भी संशोधित करने से रोकता है।

C # में, कीवर्ड const मौजूद है, लेकिन फ़ंक्शन पैरामीटर के लिए समान प्रभाव नहीं है, जैसा कि C/C++ में होता है। हालाँकि, जाँच करने के लिए कंपाइलर को हिलाने का एक तरीका है, हालाँकि यह थोड़ा मुश्किल है।[5] समान प्रभाव प्राप्त करने के लिए, पहले दो इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) परिभाषित किए गए हैं

public interface IReadable
{
    IValueInterface aValue { get; }
}

public interface IWritable : IReadable
{
    IValueInterface aValue { set; }
}

public class AnObject : IWritable
{
    private ConcreteValue _aValue;

    public IValueInterface aValue
    {
        get { return _aValue; }
        set { _aValue = value as ConcreteValue; }
    }
}

फिर, परिभाषित विधियाँ केवल-पढ़ने या पढ़ने/लिखने की क्षमताओं के साथ सही इंटरफ़ेस का चयन करती हैं:

public void DoSomething(IReadable aVariable)
{
    // Cannot modify aVariable!
}

public void DoSomethingElse(IWritable aVariable)
{
    // Can modify aVariable, so be careful!
}

वस्तु-उन्मुख स्थिरांक

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

वस्तु-उन्मुख भाषाएँ जैसे C++ स्थिरांकता को और भी आगे बढ़ाती हैं। किसी संरचना या वर्ग के अलग-अलग सदस्यों को वर्ग नहीं होने पर भी स्थिर बनाया जा सकता है। इसके विपरीत, mutable कीवर्ड एक वर्ग के सदस्य को बदलने की अनुमति देता है, भले ही किसी वस्तु को तत्काल किया गया हो const.

सी ++ में भी कार्य स्थिर हो सकते हैं। यहाँ अर्थ यह है कि कॉन्स्ट के रूप में तात्कालिक वस्तु के लिए केवल एक कॉन्स्ट फ़ंक्शन को कॉल किया जा सकता है; एक कॉन्स्ट फ़ंक्शन किसी गैर-परिवर्तनीय डेटा को नहीं बदलता है।

सी # में दोनों हैं const और ए readonly क्वालीफायर; इसका कॉन्स केवल संकलन-समय स्थिरांक के लिए है, जबकि कंस्ट्रक्टर और अन्य रनटाइम अनुप्रयोगों में केवल पढ़ने के लिए उपयोग किया जा सकता है।

जावा

जावा में क्वालीफायर कहा जाता है final जो एक संदर्भ को बदलने से रोकता है और यह सुनिश्चित करता है कि यह कभी भी किसी भिन्न वस्तु की ओर इशारा नहीं करेगा। यह संदर्भित वस्तु में परिवर्तन को ही नहीं रोकता है। जावा का final मूल रूप से एक के बराबर है const सी ++ में सूचक। यह की अन्य सुविधाएँ प्रदान नहीं करता है const.

जावा (प्रोग्रामिंग भाषा) में, क्वालीफायर final बताता है कि प्रभावित डेटा सदस्य या चर असाइन करने योग्य नहीं है, जैसा कि नीचे दिया गया है:

final int i = 3;
i = 4; // Error! Cannot modify a "final" object

यह संकलक द्वारा निर्णायक होना चाहिए जहां चर के साथ final मार्कर प्रारंभ किया गया है, और इसे केवल एक बार किया जाना चाहिए, या कक्षा संकलित नहीं होगी। जावा का final और C++ const आदिम चर के साथ लागू होने पर कीवर्ड का एक ही अर्थ होता है।

const int i = 3; // C++ declaration
i = 4; // Error!

संकेतकों को ध्यान में रखते हुए, ए {{Java|final}जावा में } संदर्भ का अर्थ कुछ समान है const C ++ में सूचक C++ में, कोई स्थिरांक सूचक प्रकार घोषित कर सकता है।

Foo *const bar = mem_location; // const pointer type

यहाँ, bar को घोषणा के समय प्रारंभ किया जाना चाहिए और इसे फिर से नहीं बदला जा सकता है, लेकिन यह जो इंगित करता है वह संशोधित है। अर्थात *bar = value यह सही है। यह किसी अन्य स्थान की ओर इशारा नहीं कर सकता है। जावा में अंतिम संदर्भ उसी तरह काम करते हैं, सिवाय इसके कि उन्हें गैर-प्रारंभिक घोषित किया जा सकता है।

final Foo i; // a Java declaration

नोट: जावा पॉइंटर्स का समर्थन नहीं करता है।[6] ऐसा इसलिए है क्योंकि पॉइंटर (कंप्यूटर प्रोग्रामिंग) जावा (प्रतिबंधों के साथ) जावा में ऑब्जेक्ट तक पहुंचने का डिफ़ॉल्ट तरीका है, और जावा उन्हें इंगित करने के लिए सितारों का उपयोग नहीं करता है। उदाहरण के लिए, i पिछले उदाहरण में एक सूचक है और उदाहरण का उपयोग करने के लिए इस्तेमाल किया जा सकता है।

C++ में केवल-पढ़ने के लिए डेटा के लिए पॉइंटर भी घोषित किया जा सकता है।

const Foo *bar;

यहाँ bar कभी भी, कुछ भी इंगित करने के लिए संशोधित किया जा सकता है; बस उस नुकीले मूल्य को संशोधित नहीं किया जा सकता है bar सूचक।

जावा में कोई समकक्ष तंत्र नहीं है। इस प्रकार भी नहीं हैं const तरीके। जावा में कॉन्स्ट-शुद्धता को लागू नहीं किया जा सकता है, हालांकि इंटरफेस के उपयोग और कक्षा में केवल पढ़ने के लिए इंटरफ़ेस को परिभाषित करने और इसे पास करने से, कोई यह सुनिश्चित कर सकता है कि ऑब्जेक्ट्स को सिस्टम के चारों ओर इस तरह पारित किया जा सकता है कि उन्हें संशोधित नहीं किया जा सकता है।

जावा संग्रह ढांचा एक अपरिवर्तनीय रैपर बनाने का एक तरीका प्रदान करता है Collection के जरिए Collections.unmodifiableCollection() और इसी तरह के तरीके।

जावा में एक विधि को अंतिम घोषित किया जा सकता है, जिसका अर्थ है कि इसे उपवर्गों में ओवरराइड नहीं किया जा सकता है।

सी#

सी # में, क्वालीफायर readonly का डेटा सदस्यों पर वही प्रभाव पड़ता है जो जावा में finalकरता है और C++ में const करता है; संशोधक const का प्रभाव C++ में #define के समान (अभी तक टाइप किया गया और वर्ग-दायरा) है। विधियों और कक्षाओं पर लागू होने पर जावा के finalका अन्य, इनहेरिटेंस-इनहिबिटिंग प्रभाव C # में कीवर्ड sealed की सहायता से प्रेरित होता है।

सी ++ के विपरीत, सी # विधि और पैरामीटर को const के रूप में चिह्नित करने की अनुमति नहीं देता है। हालाँकि, कोई भी रीड-ओनली उप-वर्गों को पार कर सकता है, और .NET फ्रेमवर्क अपरिवर्तनीय संग्रहों को अपरिवर्तनीय संग्रहों में परिवर्तित करने के लिए कुछ समर्थन प्रदान करता है जिन्हें केवल-पढ़ने के लिए रैपर के रूप में पारित किया जा सकता है।

प्रतिमान द्वारा

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

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

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

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

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

स्थिरांकों के लिए नामकरण परिपाटी भिन्न होती है। कुछ बस उन्हें उसी तरह नाम देते हैं जैसे वे किसी अन्य चर को देते हैं। अन्य लोग स्थिरांक के लिए राजधानियों और अंडरस्कोर का उपयोग प्रतीकात्मक मैक्रोज़ के लिए अपने पारंपरिक उपयोग के समान करते हैं, जैसे SOME_CONSTANT[7] हंगेरियन संकेतन में, एक "k" उपसर्ग स्थिरांक के साथ-साथ मैक्रोज़ और प्रगणित प्रकारों को दर्शाता है।

एक लागू अभिसमय यह है कि रूबी में, कोई भी वेरिएबल जो बड़े अक्षर से शुरू होता है, एक स्थिरांक माना जाता है, जिसमें वर्ग नाम भी शामिल हैं।

यह भी देखें

  • आईबीएम/360 और जेड/आर्किटेक्चर प्लेटफॉर्म के लिए एड्रेस कॉन्सटेंट

टिप्पणियाँ

  1. In some cases the expectation of constancy can be circumvented, e.g. using self-modifying code or by overwriting the memory location where the value is stored.
  2. This is not universal: in Ada input parameters and loop parameters are implicitly constant, for instance.

संदर्भ

  1. Ex. IBM Systems Information. Instruction Set - Assembler Language Reference for PowerPC.
  2. Booch, Grady (1983). एडा के साथ सॉफ्टवेयर इंजीनियरिंग. Benjamin Cummings. pp. 116–117. ISBN 0-8053-0600-5.
  3. Jump up to: 3.0 3.1 3.2 Schilling, Jonathan L. (April 1995). "Dynamically-Valued Constants: An Underused Language Feature". SIGPLAN Notices. 30 (4): 13–20. doi:10.1145/202176.202177. S2CID 17489672.
  4. Perkins, J. A. Programming Practices: Analysis of Ada Source Developed for the Air Force, Army, and Navy. Proceedings TRI-Ada '89. pp. 342–354. doi:10.1145/74261.74287.
  5. Timwi (2010-09-09). "Read-only ("const"-like) function parameters of C#". Stack Overflow. Retrieved 2012-05-06. [...] Then you can declare methods whose parameter type "tells" whether it plans on changing the variable or not:. [...] This mimics compile-time checks similar to constness in C++. As Eric Lippert correctly pointed out, this is not the same as immutability. But as a C++ programmer I think you know that.
  6. "Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle". Java.sun.com. 2013-08-14. Retrieved 2013-08-18.
  7. Microsoft Office XP Developer: Constant Names