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

From Vigyanwiki
No edit summary
 
(5 intermediate revisions by 5 users not shown)
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}}
[[कंप्यूटर प्रोग्रामिंग]] में, डेक्लेरेशन एक [[भाषा निर्माण|लैंग्वेज निर्माण]] के रूप में होती है, जो [[पहचानकर्ता (कंप्यूटर प्रोग्रामिंग)|आइडेंटिफायर (कंप्यूटर प्रोग्रामिंग)]] गुणों को निर्दिष्ट करती है यह एक शब्द आइडेंटिफायर का अर्थ घोषित करता है।<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;
Line 6: Line 5:
* 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 14: Line 13:
| 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]] से प्रारंभ होने पर, लैम्ब्डा एक्सप्रेशन को लैंग्वेज में सम्मलित किया गया था, जिसे फलन डिक्लेरेशन के रूप में देखा जा सकता है।


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


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


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


यहाँ घोषणाओं के कुछ उदाहरण दिए गए हैं जो C में परिभाषाएँ नहीं हैं:
यहाँ डेक्लेरेशन के कुछ उदाहरण दिए गए हैं जो C में परिभाषाएँ नहीं हैं,
<वाक्यविन्यास लैंग = सी>
 
बाहरी चार उदाहरण 1;
extern char example1;
बाहरी int example2;
 
शून्य उदाहरण 3 (शून्य);
extern int example2;
</वाक्यविन्यास हाइलाइट>
 
void example3(void);
 
यहाँ डेक्लेरेशन के कुछ उदाहरण हैं जो परिभाषाएँ हैं, फिर से C में
 
char example1; /* Outside of a function definition it will be initialized to zero. */


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


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


== यह भी देखें ==
== यह भी देखें ==
* फ़ंक्शन प्रोटोटाइप
* फलन प्रोटोटाइप
* [[कार्यक्षेत्र (प्रोग्रामिंग)]]
* [[कार्यक्षेत्र (प्रोग्रामिंग)|स्कोप (प्रोग्रामिंग)]]


==टिप्पणियाँ==
==टिप्पणियाँ==
Line 62: Line 64:
* [http://msdn.microsoft.com/en-us/library/0e5kx78b.aspx Declarations and Definitions (C++)], MSDN
* [http://msdn.microsoft.com/en-us/library/0e5kx78b.aspx Declarations and Definitions (C++)], MSDN
*:"Declarations tell the compiler that a program element or name exists. Definitions specify what code or data the name describes."
*:"Declarations tell the compiler that a program element or name exists. Definitions specify what code or data the name describes."
[[Category: प्रोग्रामिंग भाषा अवधारणाओं]] [[Category: उदाहरण सी कोड वाले लेख]]


[[Category: Machine Translated Page]]
[[Category:Articles with hatnote templates targeting a nonexistent page]]
[[Category:Created On 17/02/2023]]
[[Category:Created On 17/02/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Short description with empty Wikidata description]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:उदाहरण सी कोड वाले लेख]]
[[Category:प्रोग्रामिंग भाषा अवधारणाओं]]

Latest revision as of 15:19, 7 November 2023

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

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

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

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

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

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

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

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

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

यहाँ डेक्लेरेशन के कुछ उदाहरण दिए गए हैं जो C में परिभाषाएँ नहीं हैं,

extern char example1;

extern int example2;

void example3(void);

यहाँ डेक्लेरेशन के कुछ उदाहरण हैं जो परिभाषाएँ हैं, फिर से C में

char example1; /* Outside of a function definition it will be initialized to zero. */

int example2 = 5;

void example3(void) { /* definition between braces */ }

अपरिभाषित चर

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

यह भी देखें

टिप्पणियाँ

  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


बाहरी संबंध