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

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

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

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

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

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

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

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

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

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

यह भी देखें

 * फ़ंक्शन प्रोटोटाइप
 * कार्यक्षेत्र (प्रोग्रामिंग)

बाहरी संबंध

 * Declare vs Define in C and C++, Alex Allain
 * 8.2. Declarations, Definitions and Accessibility, The C Book, GBdirect
 * 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."