फंक्शन प्रोटोटाइप: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(6 intermediate revisions by 3 users not shown)
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]] मानक के लिए प्रोटोटाइप के उपयोग की आवश्यकता होती है।
सी के शुरुआती संस्करणों में, यदि कोई फ़ंक्शन पहले घोषित नहीं किया गया था और उसका नाम बाएं कोष्ठक के पश्चात अभिव्यक्ति में आया था, तो इसे अंतर्निहित रूप से फ़ंक्शन के रूप में घोषित किया गया था जो <code>int</code> लौटाता है और इसके तर्कों के बारे में कुछ भी नहीं माना गया था। इस स्थिति में कंपाइलर तर्कों की संख्या और टाइप की संकलन-समय वैधता जांच करने में सक्षम नहीं होता है। [[C99]] मानक के लिए प्रोटोटाइप के उपयोग की आवश्यकता होती है।


<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
Line 52: Line 52:
}
}
</syntaxhighlight>
</syntaxhighlight>
फ़ंक्शन {{mono|MyFunction}} को पूर्णांक तर्क के साथ कॉल किए जाने की अपेक्षा करता है। फ़ंक्शन प्रोटोटाइप को शामिल करके, आप कंपाइलर को सूचित करते हैं कि फ़ंक्शन एक पूर्णांक तर्क लेता है और आप कंपाइलर को गलत तरीके से निर्दिष्ट कॉल पकड़ने में सक्षम बनाते हैं।
फ़ंक्शन {{mono|MyFunction}} को पूर्णांक तर्क के साथ कॉल किए जाने की अपेक्षा करता है। फ़ंक्शन प्रोटोटाइप को सम्मलित करके, आप कंपाइलर को सूचित करते हैं कि फ़ंक्शन पूर्णांक तर्क लेता है और आप कंपाइलर को गलत विधि से निर्दिष्ट कॉल पकड़ने में सक्षम बनाते हैं।


=== लाइब्रेरी इंटरफ़ेस बनाना ===
=== लाइब्रेरी इंटरफ़ेस बनाना ===
फ़ंक्शन प्रोटोटाइप को हेडर फ़ाइल में रखकर, कोई लाइब्रेरी (कंप्यूटिंग) के लिए एक इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) निर्दिष्ट कर सकता है।
फ़ंक्शन प्रोटोटाइप को हेडर फ़ाइल में रखकर, कोई लाइब्रेरी (कंप्यूटिंग) के लिए इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) निर्दिष्ट कर सकता है।


=== वर्ग घोषणा ===
=== वर्ग डीक्लेरेशन ===
सी++ में, फ़ंक्शन प्रोटोटाइप का उपयोग [[ कक्षा (कंप्यूटर विज्ञान) |क्लास (कंप्यूटर विज्ञान)]] परिभाषाओं में भी किया जाता है।
सी++ में, फ़ंक्शन प्रोटोटाइप का उपयोग [[ कक्षा (कंप्यूटर विज्ञान) |क्लास (कंप्यूटर विज्ञान)]] परिभाषाओं में भी किया जाता है।


Line 69: Line 69:
* {{cite book|title=The C Programming Language|last1=Kernighan|first1=Brian W.|author-link1=Brian Kernighan|last2=Ritchie Afree|first2=Dennis M.|author-link2=Dennis Ritchie|year=1988|publisher=Prentice Hall PTR|place=Upper Saddle River, NJ|edition=2nd|isbn=0-13-110362-8|url-access=registration|url=https://archive.org/details/cprogramminglang00bria}}
* {{cite book|title=The C Programming Language|last1=Kernighan|first1=Brian W.|author-link1=Brian Kernighan|last2=Ritchie Afree|first2=Dennis M.|author-link2=Dennis Ritchie|year=1988|publisher=Prentice Hall PTR|place=Upper Saddle River, NJ|edition=2nd|isbn=0-13-110362-8|url-access=registration|url=https://archive.org/details/cprogramminglang00bria}}
{{refend}}
{{refend}}
[[Category: सबरूटीन्स]] [[Category: सी प्रोग्रामिंग भाषा परिवार]] [[Category: कंप्यूटर प्रोग्रामिंग]]


 
[[Category:Articles with hatnote templates targeting a nonexistent page]]
 
[[Category: Machine Translated Page]]
[[Category:Created On 14/06/2023]]
[[Category:Created On 14/06/2023]]
[[Category:Lua-based templates]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates that add a tracking category]]
[[Category:Templates that generate short descriptions]]
[[Category:Templates using TemplateData]]
[[Category:कंप्यूटर प्रोग्रामिंग]]
[[Category:सबरूटीन्स]]
[[Category:सी प्रोग्रामिंग भाषा परिवार]]

Latest revision as of 17:22, 13 July 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.