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

From Vigyanwiki
No edit summary
 
(6 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;
* 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 11:
| 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]] से प्रारंभ होने पर, लैम्ब्डा एक्सप्रेशन को लैंग्वेज में सम्मलित किया गया था, जिसे फलन डिक्लेरेशन के रूप में देखा जा सकता है।
प्रोग्रामिंग भाषाओं के सी-परिवार में, घोषणाएं अधिकांशतः  [[हेडर फाइल]]ों में एकत्र की जाती हैं, जो अन्य स्रोत फाइलों में सम्मलित होती हैं जो इन घोषणाओं का संदर्भ देती हैं और उनका उपयोग करती हैं, लेकिन परिभाषा तक पहुंच नहीं है। शीर्षलेख फ़ाइल में जानकारी कोड के बीच इंटरफ़ेस प्रदान करती है जो घोषणा का उपयोग करती है और जो इसे परिभाषित करती है, सूचना छिपाने का एक रूप। एक घोषणा का उपयोग अधिकांशतः  विभिन्न स्रोत फ़ाइलों में परिभाषित फ़ंक्शंस या वेरिएबल्स या [[पुस्तकालय (कम्प्यूटिंग)]] में परिभाषित करने के लिए किया जाता है। परिभाषा प्रकार और घोषणा प्रकार के बीच एक बेमेल एक संकलक त्रुटि उत्पन्न करता है।


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


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


यहाँ घोषणाओं के कुछ उदाहरण दिए गए हैं जो C में परिभाषाएँ नहीं हैं:
[[जावास्क्रिप्ट]] या [[पायथन (प्रोग्रामिंग भाषा)|पायथन (प्रोग्रामिंग लैंग्वेज)]] जैसी गतिशील लैंग्वेज सामान्यतः कार्यों को फिर से परिभाषित करने की अनुमति देती हैं, अर्थात, नाम बाध्यकारी पुनः बाध्य; एक फलन एक नाम और एक मान परिभाषा के साथ किसी अन्य की प्रकार एक चर के रूप में होती है।
<वाक्यविन्यास लैंग = सी>
 
बाहरी चार उदाहरण 1;
यहाँ डेक्लेरेशन के कुछ उदाहरण दिए गए हैं जो C में परिभाषाएँ नहीं हैं,
बाहरी int example2;
 
शून्य उदाहरण 3 (शून्य);
extern char example1;
</वाक्यविन्यास हाइलाइट>
 
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


बाहरी संबंध