डेक्लेरेशन (कंप्यूटर प्रोग्रामिंग): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Short description|Programming language construct specifying an identifier's properties}}
{{Short description|Programming language construct specifying an identifier's properties}}
{{cleanup|reason=Too many examples of unclear relevancy; not enough references; problematic mentions of header files and multiple declarations|date=December 2013}}
{{cleanup|reason=Too many examples of unclear relevancy; not enough references; problematic mentions of header files and multiple declarations|date=December 2013}}
[[कंप्यूटर प्रोग्रामिंग]] में, एक घोषणा एक [[भाषा निर्माण]] है जो [[पहचानकर्ता (कंप्यूटर प्रोग्रामिंग)]] गुणों को निर्दिष्ट करती है: यह एक शब्द (पहचानकर्ता) का अर्थ घोषित करता है।<ref name="c11">"A declaration specifies the interpretation and attributes of a set of identifiers. A ''definition'' of an identifier is a declaration for that identifier that:
[[कंप्यूटर प्रोग्रामिंग]] में, डेक्लेरेशन एक [[भाषा निर्माण|लैंग्वेज निर्माण]] के रूप में होती है, जो [[पहचानकर्ता (कंप्यूटर प्रोग्रामिंग)|आइडेंटिफायर (कंप्यूटर प्रोग्रामिंग)]] गुणों को निर्दिष्ट करती है यह एक शब्द आइडेंटिफायर का अर्थ घोषित करता है।<ref name="c11">"A declaration specifies the interpretation and attributes of a set of identifiers. A ''definition'' of an identifier is a declaration for that identifier that:
* for an object [variable or constant], causes storage to be reserved for that object;
* for an object [variable or constant], causes storage to be reserved for that object;
* for a function, includes the function body;
* for a function, includes the function body;
* for an enumeration constant, is the (only) declaration of the identifier;
* for an enumeration constant, is the (only) declaration of the identifier;
* for a typedef name, is the first (or only) declaration of the identifier."
* for a typedef name, is the first (or only) declaration of the identifier."
C11 specification, 6.7: Declarations, paragraph 5.</ref> डिक्लेरेशन का सबसे अधिक उपयोग [[सबरूटीन]], [[चर (कंप्यूटर विज्ञान)]], कॉन्सटेंट (कंप्यूटर प्रोग्रामिंग), और [[वर्ग (कंप्यूटर प्रोग्रामिंग)]] के लिए किया जाता है, लेकिन अन्य संस्थाओं जैसे एन्यूमरेटर (कंप्यूटर साइंस) और टाइप डेफिनिशन के लिए भी उपयोग  किया जा सकता है।<ref name="c11"/>नाम (पहचानकर्ता स्वयं) और इकाई के प्रकार (फ़ंक्शन, चर, आदि) से परे, घोषणाएं  सामान्यतः [[डेटा प्रकार]] (चर और स्थिरांक के लिए), या प्रकार के हस्ताक्षर (फ़ंक्शन के लिए) निर्दिष्ट करती हैं; प्रकारों में आयाम भी सम्मलित  हो सकते हैं, जैसे कि डेटा संरचनाओं को व्यवस्थित करना। [[संकलक]] को इकाई के अस्तित्व की घोषणा करने के लिए एक घोषणा का उपयोग किया जाता है; यह उन दृढ़ता से टाइप की गई भाषाओं में महत्वपूर्ण है जिनके लिए फ़ंक्शन, चर और स्थिरांक की आवश्यकता होती है, और उनके प्रकार उपयोग से पहले एक घोषणा के साथ निर्दिष्ट किए जाते हैं, और [[आगे की घोषणा]] में उपयोग किया जाता है।<ref>{{cite web
C11 specification, 6.7: Declarations, paragraph 5.</ref> डिक्लेरेशन का सबसे अधिक उपयोग [[सबरूटीन]], [[चर (कंप्यूटर विज्ञान)]], कॉन्सटेंट कंप्यूटर प्रोग्रामिंग और [[वर्ग (कंप्यूटर प्रोग्रामिंग)|क्लासेस  (कंप्यूटर प्रोग्रामिंग)]] के लिए किया जाता है, लेकिन अन्य संस्थाओं जैसे एन्यूमरेटर कंप्यूटर साइंस और टाइप डेफिनिशन के लिए भी उपयोग  किया जा सकता है।<ref name="c11"/> नाम से परे आइडेंटिफायर स्वयं आइडेंटिफायर रूप में होते है और इकाई प्रकार्य, चर, आदि का डेक्लेरेशन सामान्यतया [[डेटा प्रकार]] चर और स्थिरांक के लिए या डेटा प्रकार के हस्ताक्षर फलन के लिए निर्दिष्ट करती हैं, डेटा प्रकारों में आयाम भी सम्मलित  होते हैं, जैसे कि डेटा संरचनाओं को व्यवस्थित रूप में करना होता है। [[संकलक|कम्पाइलर]] को इकाई के अस्तित्व की डेक्लेरेशन करने के लिए एक डेक्लेरेशन का उपयोग किया जाता है; यह उन दृढ़ता से टाइप की गई लैंग्वेज में महत्वपूर्ण रूप में होती है, जिनके लिए फ़ंक्शन, चर और स्थिरांक की आवश्यकता होती है और उनके डेटा प्रकार उपयोग से पहले एक डेक्लेरेशन के साथ निर्दिष्ट किए जाते हैं और [[आगे की घोषणा|आगे की]] डेक्लेरेशन में उपयोग किया जाता है।<ref>{{cite web
| access-date = 2011-06-08
| access-date = 2011-06-08
| author = Mike Banahan
| author = Mike Banahan
Line 12: Line 12:
| title = 2.5. Declaration of variables
| title = 2.5. Declaration of variables
| quote = [A] declaration [...] introduces just the name and type of something but allocates no storage[...].
| quote = [A] declaration [...] introduces just the name and type of something but allocates no storage[...].
| url = http://publications.gbdirect.co.uk/c_book/chapter2/variable_declaration.html}}</ref> शब्द घोषणा शब्द की परिभाषा के साथ अधिकांशतः विपरीत होता है,<ref name="c11"/>लेकिन अर्थ और उपयोग भाषाओं के बीच महत्वपूर्ण रूप से भिन्न होते हैं; नीचे देखें।
| url = http://publications.gbdirect.co.uk/c_book/chapter2/variable_declaration.html}}</ref> शब्द डेक्लेरेशन शब्द की परिलैंग्वेज के साथ अधिकांशतः विपरीत रूप में होता है,<ref name="c11"/> लेकिन अर्थ और उपयोग लैंग्वेज के बीच महत्वपूर्ण रूप से भिन्न होते हैं, जो हम नीचे देख सकते है।


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


== घोषणा बनाम परिभाषा ==
== डेक्लेरेशन बनाम परिभाषा ==
एक मौलिक  विरोधाभास यह है कि घोषणा में परिभाषा सम्मलित  है या नहीं: उदाहरण के लिए, चाहे एक चर या निरंतर घोषणा [[आरंभीकरण (प्रोग्रामिंग)]], या सिर्फ  इसका प्रकार; और इसी प्रकार एक फ़ंक्शन की घोषणा फ़ंक्शन के शरीर ([[कार्यान्वयन]]) को निर्दिष्ट करती है, या सिर्फ  इसके प्रकार के हस्ताक्षर।<ref name="c11"/>सभी भाषाओं में यह भेद नहीं होता है: कई भाषाओं में, घोषणाओं में निरंतर  एक परिभाषा सम्मलित  होती है, और इसे भाषा के आधार पर या तो घोषणाओं या परिभाषाओं के रूप में संदर्भित किया जा सकता है।{{efn|For example, Java uses "declaration" (class declaration, method declaration), while Python uses "definition" (class definition, function definition).<ref>[https://docs.python.org/2/reference/compound_stmts.html 7. Compound statements], ''The Python Language Reference''</ref>}} चूंकि , इन अवधारणाओं को उन भाषाओं में भिन्न  किया जाता है जिनके लिए उपयोग से पहले घोषणा की आवश्यकता होती है (जिसके लिए आगे की घोषणाओं का उपयोग किया जाता है), और उन भाषाओं में जहां इंटरफ़ेस और कार्यान्वयन भिन्न -भिन्न  होते हैं: इंटरफ़ेस में घोषणाएँ होती हैं, कार्यान्वयन में परिभाषाएँ होती हैं।{{efn|This distinction is observed in Pascal "units" (modules), and in conventional C and C++ code organization, which has [[header file]]s consisting largely of pure declarations, and [[source file]]s consisting of definitions, though this is not always strictly observed, nor enforced by the language.}}
एक मौलिक  विरोधाभास यह है कि डेक्लेरेशन में परिलैंग्वेज सम्मलित  है या नहीं: उदाहरण के लिए, चाहे एक चर या निरंतर डेक्लेरेशन [[आरंभीकरण (प्रोग्रामिंग)]], या सिर्फ  इसका प्रकार; और इसी प्रकार एक फ़ंक्शन की डेक्लेरेशन फ़ंक्शन के शरीर ([[कार्यान्वयन]]) को निर्दिष्ट करती है, या सिर्फ  इसके प्रकार के हस्ताक्षर।<ref name="c11"/>सभी लैंग्वेज में यह भेद नहीं होता है: कई लैंग्वेजमें, घोषणाओं में निरंतर  एक परिलैंग्वेज सम्मलित  होती है, और इसे लैंग्वेज के आधार पर या तो घोषणाओं या परिभाषाओं के रूप में संदर्भित किया जा सकता है।{{efn|For example, Java uses "declaration" (class declaration, method declaration), while Python uses "definition" (class definition, function definition).<ref>[https://docs.python.org/2/reference/compound_stmts.html 7. Compound statements], ''The Python Language Reference''</ref>}} चूंकि , इन अवधारणाओं को उन लैंग्वेज  में भिन्न  किया जाता है जिनके लिए उपयोग से पहले डेक्लेरेशन की आवश्यकता होती है (जिसके लिए आगे की घोषणाओं का उपयोग किया जाता है), और उन लैंग्वेजमें जहां इंटरफ़ेस और कार्यान्वयन भिन्न -भिन्न  होते हैं: इंटरफ़ेस में घोषणाएँ होती हैं, कार्यान्वयन में परिभाषाएँ होती हैं।{{efn|This distinction is observed in Pascal "units" (modules), and in conventional C and C++ code organization, which has [[header file]]s consisting largely of pure declarations, and [[source file]]s consisting of definitions, though this is not always strictly observed, nor enforced by the language.}}
अनौपचारिक उपयोग में, एक घोषणा सिर्फ  एक शुद्ध घोषणा (सिर्फ  प्रकार, कोई मूल्य या निकाय) को संदर्भित नहीं करती है, जबकि एक परिभाषा एक घोषणा को संदर्भित करती है जिसमें मूल्य या शरीर सम्मलित  होता है। चूंकि , औपचारिक उपयोग में (भाषा विनिर्देशों में), घोषणा में इन दोनों इंद्रियों को सम्मलित  किया गया है, भाषा द्वारा बहुत अच्छा  भेद के साथ: सी और सी ++ में, एक फ़ंक्शन की घोषणा जिसमें शरीर सम्मलित  नहीं है, एक [[फ़ंक्शन प्रोटोटाइप]] कहा जाता है, जबकि की घोषणा एक फ़ंक्शन जिसमें शरीर सम्मलित  होता है उसे फ़ंक्शन परिभाषा कहा जाता है। जावा में घोषणाएँ दो रूपों में होती हैं। सार्वजनिक विधियों  के लिए उन्हें इंटरफेस में विधि हस्ताक्षर के रूप में प्रस्तुत किया जा सकता है, जिसमें विधि के नाम, इनपुट प्रकार और आउटपुट प्रकार सम्मलित  हैं। अमूर्त विधियों की परिभाषा में एक समान संकेतन का उपयोग किया जा सकता है, जिसमें कोई परिभाषा नहीं है। संलग्न वर्ग को त्वरित किया जा सकता है, अपितु  एक नवीनतम  व्युत्पन्न वर्ग, जो विधि की परिभाषा प्रदान करता है, को कक्षा का एक [[उदाहरण (कंप्यूटर विज्ञान)]] बनाने के लिए बनाने की आवश्यकता होगी। [[जावा 8]] से प्रारंभ  होकर, लैम्ब्डा एक्सप्रेशन को भाषा में सम्मलित  किया गया था, जिसे फंक्शन डिक्लेरेशन के रूप में देखा जा सकता है।
अनौपचारिक उपयोग में, एक डेक्लेरेशन सिर्फ  एक शुद्ध डेक्लेरेशन (सिर्फ  प्रकार, कोई मूल्य या निकाय) को संदर्भित नहीं करती है, जबकि एक परिलैंग्वेज एक डेक्लेरेशन को संदर्भित करती है जिसमें मूल्य या शरीर सम्मलित  होता है। चूंकि , औपचारिक उपयोग में (लैंग्वेज विनिर्देशों में), डेक्लेरेशन में इन दोनों इंद्रियों को सम्मलित  किया गया है, लैंग्वेज द्वारा बहुत अच्छा  भेद के साथ: सी और सी ++ में, एक फ़ंक्शन की डेक्लेरेशन जिसमें शरीर सम्मलित  नहीं है, एक [[फ़ंक्शन प्रोटोटाइप]] कहा जाता है, जबकि की डेक्लेरेशन एक फ़ंक्शन जिसमें शरीर सम्मलित  होता है उसे फ़ंक्शन परिलैंग्वेज कहा जाता है। जावा में घोषणाएँ दो रूपों में होती हैं। सार्वजनिक विधियों  के लिए उन्हें इंटरफेस में विधि हस्ताक्षर के रूप में प्रस्तुत किया जा सकता है, जिसमें विधि के नाम, इनपुट प्रकार और आउटपुट प्रकार सम्मलित  हैं। अमूर्त विधियों की परिलैंग्वेज में एक समान संकेतन का उपयोग किया जा सकता है, जिसमें कोई परिलैंग्वेज नहीं है। संलग्न क्लासेस  को त्वरित किया जा सकता है, अपितु  एक नवीनतम  व्युत्पन्न क्लासेस , जो विधि की परिलैंग्वेज प्रदान करता है, को कक्षा का एक [[उदाहरण (कंप्यूटर विज्ञान)]] बनाने के लिए बनाने की आवश्यकता होगी। [[जावा 8]] से प्रारंभ  होकर, लैम्ब्डा एक्सप्रेशन को लैंग्वेज में सम्मलित  किया गया था, जिसे फंक्शन डिक्लेरेशन के रूप में देखा जा सकता है।


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


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


[[जावास्क्रिप्ट]] या [[पायथन (प्रोग्रामिंग भाषा)]] जैसी गतिशील भाषाएं सामान्यतः  कार्यों को फिर से परिभाषित करने की अनुमति देती हैं, अर्थात, नाम बाध्यकारी | पुनः बाध्य; एक फ़ंक्शन एक नाम और एक मान (परिभाषा) के साथ किसी अन्य की प्रकार  एक चर है।
[[जावास्क्रिप्ट]] या [[पायथन (प्रोग्रामिंग भाषा)]] जैसी गतिशील भाषाएं सामान्यतः  कार्यों को फिर से परिभाषित करने की अनुमति देती हैं, अर्थात, नाम बाध्यकारी | पुनः बाध्य; एक फ़ंक्शन एक नाम और एक मान (परिभाषा) के साथ किसी अन्य की प्रकार  एक चर है।
Line 36: Line 36:
यहाँ घोषणाओं के कुछ उदाहरण हैं जो परिभाषाएँ हैं, फिर से C में:
यहाँ घोषणाओं के कुछ उदाहरण हैं जो परिभाषाएँ हैं, फिर से C में:
<वाक्यविन्यास लैंग = सी>
<वाक्यविन्यास लैंग = सी>
चार उदाहरण 1; /* फ़ंक्शन परिभाषा के बाहर इसे शून्य से प्रारंभ किया जाएगा। */
चार उदाहरण 1; /* फ़ंक्शन परिलैंग्वेज के बाहर इसे शून्य से प्रारंभ किया जाएगा। */
int example2 = 5;
int example2 = 5;
शून्य उदाहरण 3 (शून्य) {/* ब्रेसिज़ के बीच परिभाषा */ }
शून्य उदाहरण 3 (शून्य) {/* ब्रेसिज़ के बीच परिलैंग्वेज */ }
</वाक्यविन्यास हाइलाइट>
</वाक्यविन्यास हाइलाइट>


== अपरिभाषित चर ==
== अपरिभाषित चर ==
{{main|Undefined variable}}
{{main|Undefined variable}}
कुछ प्रोग्रामिंग भाषाओं में, एक अंतर्निहित घोषणा पहली बार प्रदान की जाती है जब [[संकलन समय]] पर इस प्रकार  के एक चर का सामना करना पड़ता है। अन्य भाषाओं में, ऐसे उपयोग को एक त्रुटि माना जाता है, जिसके परिणामस्वरूप निदान संदेश हो सकता है। कुछ भाषाएं निहित घोषणा व्यवहार के साथ प्रारंभ  हुई हैं, लेकिन जैसे-जैसे वे परिपक्व हुईं, उन्होंने इसे निष्क्रिय करने का एक विकल्प प्रदान किया (जैसे [[पर्ल]] का<code>use strict</code>या [[मूल दृश्य]]<code>Option Explicit</code>).
कुछ प्रोग्रामिंग लैंग्वेज में, एक अंतर्निहित डेक्लेरेशन पहली बार प्रदान की जाती है जब [[संकलन समय]] पर इस प्रकार  के एक चर का सामना करना पड़ता है। अन्य भाषाओं में, ऐसे उपयोग को एक त्रुटि माना जाता है, जिसके परिणामस्वरूप निदान संदेश हो सकता है। कुछ भाषाएं निहित डेक्लेरेशन व्यवहार के साथ प्रारंभ  हुई हैं, लेकिन जैसे-जैसे वे परिपक्व हुईं, उन्होंने इसे निष्क्रिय करने का एक विकल्प प्रदान किया (जैसे [[पर्ल]] का<code>use strict</code>या [[मूल दृश्य]]<code>Option Explicit</code>).


== यह भी देखें ==
== यह भी देखें ==

Revision as of 00:31, 27 February 2023

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

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

डेक्लेरेशन बनाम परिभाषा

एक मौलिक विरोधाभास यह है कि डेक्लेरेशन में परिलैंग्वेज सम्मलित है या नहीं: उदाहरण के लिए, चाहे एक चर या निरंतर डेक्लेरेशन आरंभीकरण (प्रोग्रामिंग), या सिर्फ इसका प्रकार; और इसी प्रकार एक फ़ंक्शन की डेक्लेरेशन फ़ंक्शन के शरीर (कार्यान्वयन) को निर्दिष्ट करती है, या सिर्फ इसके प्रकार के हस्ताक्षर।[1]सभी लैंग्वेज में यह भेद नहीं होता है: कई लैंग्वेजमें, घोषणाओं में निरंतर एक परिलैंग्वेज सम्मलित होती है, और इसे लैंग्वेज के आधार पर या तो घोषणाओं या परिभाषाओं के रूप में संदर्भित किया जा सकता है।[lower-alpha 1] चूंकि , इन अवधारणाओं को उन लैंग्वेज में भिन्न किया जाता है जिनके लिए उपयोग से पहले डेक्लेरेशन की आवश्यकता होती है (जिसके लिए आगे की घोषणाओं का उपयोग किया जाता है), और उन लैंग्वेजमें जहां इंटरफ़ेस और कार्यान्वयन भिन्न -भिन्न होते हैं: इंटरफ़ेस में घोषणाएँ होती हैं, कार्यान्वयन में परिभाषाएँ होती हैं।[lower-alpha 2] अनौपचारिक उपयोग में, एक डेक्लेरेशन सिर्फ एक शुद्ध डेक्लेरेशन (सिर्फ प्रकार, कोई मूल्य या निकाय) को संदर्भित नहीं करती है, जबकि एक परिलैंग्वेज एक डेक्लेरेशन को संदर्भित करती है जिसमें मूल्य या शरीर सम्मलित होता है। चूंकि , औपचारिक उपयोग में (लैंग्वेज विनिर्देशों में), डेक्लेरेशन में इन दोनों इंद्रियों को सम्मलित किया गया है, लैंग्वेज द्वारा बहुत अच्छा भेद के साथ: सी और सी ++ में, एक फ़ंक्शन की डेक्लेरेशन जिसमें शरीर सम्मलित नहीं है, एक फ़ंक्शन प्रोटोटाइप कहा जाता है, जबकि की डेक्लेरेशन एक फ़ंक्शन जिसमें शरीर सम्मलित होता है उसे फ़ंक्शन परिलैंग्वेज कहा जाता है। जावा में घोषणाएँ दो रूपों में होती हैं। सार्वजनिक विधियों के लिए उन्हें इंटरफेस में विधि हस्ताक्षर के रूप में प्रस्तुत किया जा सकता है, जिसमें विधि के नाम, इनपुट प्रकार और आउटपुट प्रकार सम्मलित हैं। अमूर्त विधियों की परिलैंग्वेज में एक समान संकेतन का उपयोग किया जा सकता है, जिसमें कोई परिलैंग्वेज नहीं है। संलग्न क्लासेस को त्वरित किया जा सकता है, अपितु एक नवीनतम व्युत्पन्न क्लासेस , जो विधि की परिलैंग्वेज प्रदान करता है, को कक्षा का एक उदाहरण (कंप्यूटर विज्ञान) बनाने के लिए बनाने की आवश्यकता होगी। जावा 8 से प्रारंभ होकर, लैम्ब्डा एक्सप्रेशन को लैंग्वेज में सम्मलित किया गया था, जिसे फंक्शन डिक्लेरेशन के रूप में देखा जा सकता है।

डेक्लेरेशन और परिभाषाएं

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

चर के लिए, परिभाषाएँ स्मृति के एक क्षेत्र के लिए मान निर्दिष्ट करती हैं जो डेक्लेरेशन चरण के समय आरक्षित था। फ़ंक्शंस के लिए, परिभाषाएँ फ़ंक्शन बॉडी की आपूर्ति करती हैं। जबकि एक चर या फ़ंक्शन को कई बार घोषित किया जा सकता है, इसे सामान्यतः एक बार परिभाषित किया जाता है (सी ++ में, इसे एक परिलैंग्वेज नियम या ओडीआर के रूप में जाना जाता है)।

जावास्क्रिप्ट या पायथन (प्रोग्रामिंग भाषा) जैसी गतिशील भाषाएं सामान्यतः कार्यों को फिर से परिभाषित करने की अनुमति देती हैं, अर्थात, नाम बाध्यकारी | पुनः बाध्य; एक फ़ंक्शन एक नाम और एक मान (परिभाषा) के साथ किसी अन्य की प्रकार एक चर है।

यहाँ घोषणाओं के कुछ उदाहरण दिए गए हैं जो C में परिभाषाएँ नहीं हैं: <वाक्यविन्यास लैंग = सी> बाहरी चार उदाहरण 1; बाहरी int example2; शून्य उदाहरण 3 (शून्य); </वाक्यविन्यास हाइलाइट>

यहाँ घोषणाओं के कुछ उदाहरण हैं जो परिभाषाएँ हैं, फिर से C में: <वाक्यविन्यास लैंग = सी> चार उदाहरण 1; /* फ़ंक्शन परिलैंग्वेज के बाहर इसे शून्य से प्रारंभ किया जाएगा। */ int example2 = 5; शून्य उदाहरण 3 (शून्य) {/* ब्रेसिज़ के बीच परिलैंग्वेज */ } </वाक्यविन्यास हाइलाइट>

अपरिभाषित चर

कुछ प्रोग्रामिंग लैंग्वेज में, एक अंतर्निहित डेक्लेरेशन पहली बार प्रदान की जाती है जब संकलन समय पर इस प्रकार के एक चर का सामना करना पड़ता है। अन्य भाषाओं में, ऐसे उपयोग को एक त्रुटि माना जाता है, जिसके परिणामस्वरूप निदान संदेश हो सकता है। कुछ भाषाएं निहित डेक्लेरेशन व्यवहार के साथ प्रारंभ हुई हैं, लेकिन जैसे-जैसे वे परिपक्व हुईं, उन्होंने इसे निष्क्रिय करने का एक विकल्प प्रदान किया (जैसे पर्ल काuse strictया मूल दृश्यOption Explicit).

यह भी देखें

टिप्पणियाँ

  1. For example, Java uses "declaration" (class declaration, method declaration), while Python uses "definition" (class definition, function definition).[3]
  2. This distinction is observed in Pascal "units" (modules), and in conventional C and C++ code organization, which has header files consisting largely of pure declarations, and source files consisting of definitions, though this is not always strictly observed, nor enforced by the language.


संदर्भ

  1. 1.0 1.1 1.2 1.3 "A declaration specifies the interpretation and attributes of a set of identifiers. A definition of an identifier is a declaration for that identifier that:
    • for an object [variable or constant], causes storage to be reserved for that object;
    • for a function, includes the function body;
    • for an enumeration constant, is the (only) declaration of the identifier;
    • for a typedef name, is the first (or only) declaration of the identifier."
    C11 specification, 6.7: Declarations, paragraph 5.
  2. Mike Banahan. "2.5. Declaration of variables". GBdirect. Retrieved 2011-06-08. [A] declaration [...] introduces just the name and type of something but allocates no storage[...].
  3. 7. Compound statements, The Python Language Reference


बाहरी संबंध