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

From Vigyanwiki
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|function declarations|the prototype property of JavaScript functions and objects|JavaScript#Object-orientation (prototype-based)|other uses|Software prototyping}}[[कंप्यूटर प्रोग्रामिंग]] में, एक फ़ंक्शन प्रोटोटाइप या फ़ंक्शन इंटरफ़ेस एक फ़ंक्शन (प्रोग्रामिंग) की [[घोषणा (कंप्यूटर प्रोग्रामिंग)]] है जो फ़ंक्शन के नाम और प्रकार के हस्ताक्षर (एरीटी, [[डेटा प्रकार]] के [[पैरामीटर (कंप्यूटर प्रोग्रामिंग)]], और रिटर्न प्रकार) को निर्दिष्ट करता है, लेकिन छोड़ देता है समारोह शरीर। जबकि एक फ़ंक्शन परिभाषा निर्दिष्ट करती है कि "कैसे" फ़ंक्शन वह करता है जो वह करता है (कार्यान्वयन), एक फ़ंक्शन प्रोटोटाइप केवल इसके इंटरफ़ेस को निर्दिष्ट करता है, अर्थात "क्या" डेटा प्रकार इसमें जाते हैं और इससे बाहर आते हैं। शब्द फ़ंक्शन प्रोटोटाइप विशेष रूप [[समारोह (प्रोग्रामिंग)]] भाषाओं [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]] के संदर्भ में प्रयोग किया जाता है जहां [[हेडर फाइल]]ों में फ़ंक्शंस की [[आगे की घोषणा]]एं प्रोग्राम को [[अनुवाद इकाई (प्रोग्रामिंग)]] में विभाजित करने की अनुमति देती हैं, यानी भागों में जो एक [[ संकलक |संकलक]] कर सकता है एक [[निष्पादन]] योग्य या एक पुस्तकालय (कंप्यूटिंग) में एक [[लिंकर (कंप्यूटिंग)]] द्वारा संयुक्त होने के लिए अलग से [[वस्तु फ़ाइल]] में अनुवाद करें।
{{About|फ़ंक्शन डेक्लेरेशंस|जावास्क्रिप्ट फ़ंक्शंस और ऑब्जेक्ट्स की प्रोटोटाइप प्रॉपर्टी|जावास्क्रिप्ट#ऑब्जेक्ट-ओरिएंटेशन (प्रोटोटाइप-आधारित)|अन्य उपयोग|सॉफ्टवेयर प्रोटोटाइपिंग}}[[कंप्यूटर प्रोग्रामिंग]] में, एक '''फ़ंक्शन प्रोटोटाइप''' या फ़ंक्शन इंटरफ़ेस एक फ़ंक्शन की [[घोषणा (कंप्यूटर प्रोग्रामिंग)]] है जो फ़ंक्शन का नाम और टाइप हस्ताक्षर (एरिटी, [[डेटा प्रकार|डेटा टाइप]] के [[पैरामीटर (कंप्यूटर प्रोग्रामिंग)]] और रिटर्न टाइप) निर्दिष्ट करता है, लेकिन फ़ंक्शन बॉडी को छोड़ देता है। जबकि एक फ़ंक्शन परिभाषा निर्दिष्ट करती है कि फ़ंक्शन वह कैसे करता है जो वह करता है ("कार्यान्वयन"), एक फ़ंक्शन प्रोटोटाइप केवल अपने इंटरफ़ेस को निर्दिष्ट करता है, अर्थात कौन से डेटा टाइप इसमें जाते हैं और इससे बाहर आते हैं। शब्द "फ़ंक्शन प्रोटोटाइप" का उपयोग विशेष रूप से [[प्रोग्रामिंग]] भाषाओं [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]] के संदर्भ में किया जाता है, जहां [[हेडर फ़ाइलों]] में फ़ंक्शन की [[आगे की घोषणाओं]] को रखने से एक प्रोग्राम को [[अनुवाद इकाई (प्रोग्रामिंग)]] में विभाजित करने की अनुमति मिलती है, यानी उन हिस्सों में जिन्हें एक कंपाइलर अलग से [[ऑब्जेक्ट फ़ाइलों]] में अनुवाद कर सकता है, एक [[लिंकर (कंप्यूटिंग)]] द्वारा एक निष्पादन योग्य या लाइब्रेरी में संयोजित किया जाता है।


एक प्रोटोटाइप में, पैरामीटर नाम वैकल्पिक होते हैं (और C/C++ में फ़ंक्शन प्रोटोटाइप स्कोप (कंप्यूटर विज्ञान) होता है, जिसका अर्थ है कि उनका दायरा प्रोटोटाइप के अंत में समाप्त होता है), हालांकि, सभी संशोधक के साथ प्रकार आवश्यक है (उदाहरण के लिए यदि यह है एक [[सूचक (कंप्यूटर प्रोग्रामिंग)]] या एक संदर्भ {{mono|[[const]]}} पैरामीटर) को छोड़कर {{mono|const}} अकेला।
एक प्रोटोटाइप में, पैरामीटर का नाम वैकल्पिक होता है, (और सी/सी++ में फ़ंक्शन प्रोटोटाइप स्कोप होता है, जिसका अर्थ है कि उनका दायरा प्रोटोटाइप के अंत में समाप्त होता है), हालांकि, सभी संशोधक के साथ टाइप आवश्यक है। यदि यह अकेले कॉन्स्ट को छोड़कर एक [[सूचक (कंप्यूटर प्रोग्रामिंग)]] या [[कॉन्स्ट]] पैरामीटर का संदर्भ है।


[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग | ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] में, [[प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] और मेथड (कंप्यूटर प्रोग्रामिंग) #Abstract_methods एक ही उद्देश्य को पूरा करते हैं।
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] में, इंटरफ़ेस और अमूर्त विधियाँ एक ही उद्देश्य को पूरा करती हैं।


== उदाहरण ==
== उदाहरण ==
Line 17: Line 17:
void Sum( int, int );
void Sum( int, int );
</syntaxhighlight>
</syntaxhighlight>
फंक्शन प्रोटोटाइप में फंक्शन सिग्नेचर, फंक्शन का नाम, रिटर्न टाइप और एक्सेस स्पेसियर शामिल हैं। इस स्थिति में फ़ंक्शन का नाम Sum है। फ़ंक्शन हस्ताक्षर मापदंडों की संख्या और उनके प्रकार को परिभाषित करता है। वापसी का प्रकार शून्य है। इसका मतलब है कि फ़ंक्शन कोई मान नहीं लौटाएगा। ध्यान दें कि पहले उदाहरण में पैरामीटर नाम वैकल्पिक हैं।
फ़ंक्शन प्रोटोटाइप में फ़ंक्शन सिग्नेचर, फंक्शन का नाम, रिटर्न टाइप और एक्सेस विनिर्देशक शामिल हैं। इस स्थिति में फ़ंक्शन का नाम "सम" है। फ़ंक्शन सिग्नेचर पैरामीटरों की संख्या और उनके टाइप को परिभाषित करता है। रिटर्न टाइप "शून्य" है। इसका मतलब यह है कि फ़ंक्शन कोई मान वापस नहीं करता है। ध्यान दें कि पहले उदाहरण में पैरामीटर नाम वैकल्पिक हैं।


== उपयोग ==
== उपयोग ==
सी के शुरुआती संस्करणों में, यदि कोई फ़ंक्शन पहले घोषित नहीं किया गया था और इसका नाम बाएं कोष्ठक के बाद अभिव्यक्ति में हुआ था, तो इसे एक फ़ंक्शन के रूप में स्पष्ट रूप से घोषित किया गया था जो एक <code>int</code> और इसके तर्कों के बारे में कुछ भी नहीं माना गया था। इस स्थिति में संकलक तर्कों की संख्या और प्रकार (ओं) की संकलन-समय वैधता जाँच करने में सक्षम नहीं होगा।
सी के शुरुआती संस्करणों में, यदि कोई फ़ंक्शन पहले घोषित नहीं किया गया था और उसका नाम बाएं कोष्ठक के बाद एक अभिव्यक्ति में आया था, तो इसे अंतर्निहित रूप से एक फ़ंक्शन के रूप में घोषित किया गया था जो एक <code>int</code> लौटाता है और इसके तर्कों के बारे में कुछ भी नहीं माना गया था। इस स्थिति में कंपाइलर तर्कों की संख्या और टाइप की संकलन-समय वैधता जांच करने में सक्षम नहीं होता है। [[C99]] मानक के लिए प्रोटोटाइप के उपयोग की आवश्यकता होती है।
[[C99]] मानक को प्रोटोटाइप के उपयोग की आवश्यकता होती है।


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


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


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


== यह भी देखें ==
== यह भी देखें ==

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.