फंक्शन प्रोटोटाइप: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
{{Short description|Declaration of a function's name and type signature but not body}} | {{Short description|Declaration of a function's name and type signature but not body}} | ||
{{About| | {{About|फ़ंक्शन डेक्लेरेशंस|जावास्क्रिप्ट फ़ंक्शंस और ऑब्जेक्ट्स की प्रोटोटाइप प्रॉपर्टी|जावास्क्रिप्ट#ऑब्जेक्ट-ओरिएंटेशन (प्रोटोटाइप-आधारित)|अन्य उपयोग|सॉफ्टवेयर प्रोटोटाइपिंग}}[[कंप्यूटर प्रोग्रामिंग]] में, एक '''फ़ंक्शन प्रोटोटाइप''' या फ़ंक्शन इंटरफ़ेस एक फ़ंक्शन की [[घोषणा (कंप्यूटर प्रोग्रामिंग)]] है जो फ़ंक्शन का नाम और टाइप हस्ताक्षर (एरिटी, [[डेटा प्रकार|डेटा टाइप]] के [[पैरामीटर (कंप्यूटर प्रोग्रामिंग)]] और रिटर्न टाइप) निर्दिष्ट करता है, लेकिन फ़ंक्शन बॉडी को छोड़ देता है। जबकि एक फ़ंक्शन परिभाषा निर्दिष्ट करती है कि फ़ंक्शन वह कैसे करता है जो वह करता है ("कार्यान्वयन"), एक फ़ंक्शन प्रोटोटाइप केवल अपने इंटरफ़ेस को निर्दिष्ट करता है, अर्थात कौन से डेटा टाइप इसमें जाते हैं और इससे बाहर आते हैं। शब्द "फ़ंक्शन प्रोटोटाइप" का उपयोग विशेष रूप से [[प्रोग्रामिंग]] भाषाओं [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]] के संदर्भ में किया जाता है, जहां [[हेडर फ़ाइलों]] में फ़ंक्शन की [[आगे की घोषणाओं]] को रखने से एक प्रोग्राम को [[अनुवाद इकाई (प्रोग्रामिंग)]] में विभाजित करने की अनुमति मिलती है, यानी उन हिस्सों में जिन्हें एक कंपाइलर अलग से [[ऑब्जेक्ट फ़ाइलों]] में अनुवाद कर सकता है, एक [[लिंकर (कंप्यूटिंग)]] द्वारा एक निष्पादन योग्य या लाइब्रेरी में संयोजित किया जाता है। | ||
एक प्रोटोटाइप में, पैरामीटर नाम वैकल्पिक | एक प्रोटोटाइप में, पैरामीटर का नाम वैकल्पिक होता है, (और सी/सी++ में फ़ंक्शन प्रोटोटाइप स्कोप होता है, जिसका अर्थ है कि उनका दायरा प्रोटोटाइप के अंत में समाप्त होता है), हालांकि, सभी संशोधक के साथ टाइप आवश्यक है। यदि यह अकेले कॉन्स्ट को छोड़कर एक [[सूचक (कंप्यूटर प्रोग्रामिंग)]] या [[कॉन्स्ट]] पैरामीटर का संदर्भ है। | ||
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग | ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] में, | [[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] में, इंटरफ़ेस और अमूर्त विधियाँ एक ही उद्देश्य को पूरा करती हैं। | ||
== उदाहरण == | == उदाहरण == | ||
Line 17: | Line 17: | ||
void Sum( int, int ); | void Sum( int, int ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
फ़ंक्शन प्रोटोटाइप में फ़ंक्शन सिग्नेचर, फंक्शन का नाम, रिटर्न टाइप और एक्सेस विनिर्देशक शामिल हैं। इस स्थिति में फ़ंक्शन का नाम "सम" है। फ़ंक्शन सिग्नेचर पैरामीटरों की संख्या और उनके टाइप को परिभाषित करता है। रिटर्न टाइप "शून्य" है। इसका मतलब यह है कि फ़ंक्शन कोई मान वापस नहीं करता है। ध्यान दें कि पहले उदाहरण में पैरामीटर नाम वैकल्पिक हैं। | |||
== उपयोग == | == उपयोग == | ||
सी के शुरुआती संस्करणों में, यदि कोई फ़ंक्शन पहले घोषित नहीं किया गया था और | सी के शुरुआती संस्करणों में, यदि कोई फ़ंक्शन पहले घोषित नहीं किया गया था और उसका नाम बाएं कोष्ठक के बाद एक अभिव्यक्ति में आया था, तो इसे अंतर्निहित रूप से एक फ़ंक्शन के रूप में घोषित किया गया था जो एक <code>int</code> लौटाता है और इसके तर्कों के बारे में कुछ भी नहीं माना गया था। इस स्थिति में कंपाइलर तर्कों की संख्या और टाइप की संकलन-समय वैधता जांच करने में सक्षम नहीं होता है। [[C99]] मानक के लिए प्रोटोटाइप के उपयोग की आवश्यकता होती है। | ||
[[C99]] मानक | |||
<syntaxhighlight lang="c"> | <syntaxhighlight lang="c"> | ||
Line 53: | Line 52: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
फ़ंक्शन {{mono|MyFunction}} को पूर्णांक तर्क के साथ कॉल किए जाने की अपेक्षा करता है। फ़ंक्शन प्रोटोटाइप को शामिल करके, आप कंपाइलर को सूचित करते हैं कि फ़ंक्शन एक पूर्णांक तर्क लेता है और आप कंपाइलर को गलत तरीके से निर्दिष्ट कॉल पकड़ने में सक्षम बनाते हैं। | |||
=== | === लाइब्रेरी इंटरफ़ेस बनाना === | ||
फ़ंक्शन प्रोटोटाइप को हेडर फ़ाइल में रखकर, कोई लाइब्रेरी (कंप्यूटिंग) के लिए एक इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) निर्दिष्ट कर सकता है। | |||
=== वर्ग घोषणा === | === वर्ग घोषणा === | ||
सी++ में, फ़ंक्शन प्रोटोटाइप का उपयोग [[ कक्षा (कंप्यूटर विज्ञान) |क्लास (कंप्यूटर विज्ञान)]] परिभाषाओं में भी किया जाता है। | |||
== यह भी देखें == | == यह भी देखें == |
Revision as of 21:18, 26 June 2023
कंप्यूटर प्रोग्रामिंग में, एक फ़ंक्शन प्रोटोटाइप या फ़ंक्शन इंटरफ़ेस एक फ़ंक्शन की घोषणा (कंप्यूटर प्रोग्रामिंग) है जो फ़ंक्शन का नाम और टाइप हस्ताक्षर (एरिटी, डेटा टाइप के पैरामीटर (कंप्यूटर प्रोग्रामिंग) और रिटर्न टाइप) निर्दिष्ट करता है, लेकिन फ़ंक्शन बॉडी को छोड़ देता है। जबकि एक फ़ंक्शन परिभाषा निर्दिष्ट करती है कि फ़ंक्शन वह कैसे करता है जो वह करता है ("कार्यान्वयन"), एक फ़ंक्शन प्रोटोटाइप केवल अपने इंटरफ़ेस को निर्दिष्ट करता है, अर्थात कौन से डेटा टाइप इसमें जाते हैं और इससे बाहर आते हैं। शब्द "फ़ंक्शन प्रोटोटाइप" का उपयोग विशेष रूप से प्रोग्रामिंग भाषाओं सी (प्रोग्रामिंग भाषा) और सी ++ के संदर्भ में किया जाता है, जहां हेडर फ़ाइलों में फ़ंक्शन की आगे की घोषणाओं को रखने से एक प्रोग्राम को अनुवाद इकाई (प्रोग्रामिंग) में विभाजित करने की अनुमति मिलती है, यानी उन हिस्सों में जिन्हें एक कंपाइलर अलग से ऑब्जेक्ट फ़ाइलों में अनुवाद कर सकता है, एक लिंकर (कंप्यूटिंग) द्वारा एक निष्पादन योग्य या लाइब्रेरी में संयोजित किया जाता है।
एक प्रोटोटाइप में, पैरामीटर का नाम वैकल्पिक होता है, (और सी/सी++ में फ़ंक्शन प्रोटोटाइप स्कोप होता है, जिसका अर्थ है कि उनका दायरा प्रोटोटाइप के अंत में समाप्त होता है), हालांकि, सभी संशोधक के साथ टाइप आवश्यक है। यदि यह अकेले कॉन्स्ट को छोड़कर एक सूचक (कंप्यूटर प्रोग्रामिंग) या कॉन्स्ट पैरामीटर का संदर्भ है।
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में, इंटरफ़ेस और अमूर्त विधियाँ एक ही उद्देश्य को पूरा करती हैं।
उदाहरण
निम्नलिखित फ़ंक्शन प्रोटोटाइप पर विचार करें:
void Sum( int a, int b );
या
void Sum( int, int );
फ़ंक्शन प्रोटोटाइप में फ़ंक्शन सिग्नेचर, फंक्शन का नाम, रिटर्न टाइप और एक्सेस विनिर्देशक शामिल हैं। इस स्थिति में फ़ंक्शन का नाम "सम" है। फ़ंक्शन सिग्नेचर पैरामीटरों की संख्या और उनके टाइप को परिभाषित करता है। रिटर्न टाइप "शून्य" है। इसका मतलब यह है कि फ़ंक्शन कोई मान वापस नहीं करता है। ध्यान दें कि पहले उदाहरण में पैरामीटर नाम वैकल्पिक हैं।
उपयोग
सी के शुरुआती संस्करणों में, यदि कोई फ़ंक्शन पहले घोषित नहीं किया गया था और उसका नाम बाएं कोष्ठक के बाद एक अभिव्यक्ति में आया था, तो इसे अंतर्निहित रूप से एक फ़ंक्शन के रूप में घोषित किया गया था जो एक int
लौटाता है और इसके तर्कों के बारे में कुछ भी नहीं माना गया था। इस स्थिति में कंपाइलर तर्कों की संख्या और टाइप की संकलन-समय वैधता जांच करने में सक्षम नहीं होता है। C99 मानक के लिए प्रोटोटाइप के उपयोग की आवश्यकता होती है।
char MyFunction ( int a ); /* Function prototype */
#include <stdio.h>
#include <limits.h>
int main( void )
{
putchar( MyFunction( -1 ) ); /* Correctly formatted call */
putchar( MyFunction( 1.5 ) ); /* Compiler generates a warning because of type mismatch */
putchar( MyFunction("IncorrectArgType") ); /* Compiler will generate a warning */
putchar( MyFunction() ); /* Compiler will generate an Error too few arguments */
int one=1;
putchar( MyFunction( INT_MAX + one ) ); /* Although adding 1 to the maximum integer
/* is an error it cannot be detected at compile time */
return 0;
}
char MyFunction( int n ) /* Function definition */
{
if (n > 0) return '>';
if (n < 0) return '<';
return '=';
}
फ़ंक्शन MyFunction को पूर्णांक तर्क के साथ कॉल किए जाने की अपेक्षा करता है। फ़ंक्शन प्रोटोटाइप को शामिल करके, आप कंपाइलर को सूचित करते हैं कि फ़ंक्शन एक पूर्णांक तर्क लेता है और आप कंपाइलर को गलत तरीके से निर्दिष्ट कॉल पकड़ने में सक्षम बनाते हैं।
लाइब्रेरी इंटरफ़ेस बनाना
फ़ंक्शन प्रोटोटाइप को हेडर फ़ाइल में रखकर, कोई लाइब्रेरी (कंप्यूटिंग) के लिए एक इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) निर्दिष्ट कर सकता है।
वर्ग घोषणा
सी++ में, फ़ंक्शन प्रोटोटाइप का उपयोग क्लास (कंप्यूटर विज्ञान) परिभाषाओं में भी किया जाता है।
यह भी देखें
- मॉड्यूलर प्रोग्रामिंग
- प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)
- विधि (कंप्यूटर प्रोग्रामिंग) # सार विधियाँ
संदर्भ
- Kernighan, Brian W.; Ritchie Afree, Dennis M. (1988). The C Programming Language (2nd ed.). Upper Saddle River, NJ: Prentice Hall PTR. ISBN 0-13-110362-8.