पैरामीटर (कंप्यूटर प्रोग्रामिंग): Difference between revisions

From Vigyanwiki
(TEXT)
(Text)
Line 1: Line 1:
{{Short description|An input provided to a function/subroutine}}
{{Short description|An input provided to a function/subroutine}}
{{Other uses|पैरामीटर (बहुविकल्पी)}}
{{Other uses|पैरामीटर (बहुविकल्पी)}}
[[कंप्यूटर प्रोग्रामिंग|कंप्यूटर क्रमादेशन]] में, एक पैरामीटर या एक औपचारिक तर्क एक विशेष प्रकार का चर है जिसका उपयोग [[सबरूटीन]] में इनपुट के रूप में प्रदान किए गए डेटा के भाँग में से एक को संदर्भित करने के लिए किया जाता है।{{efn|1=In this article, the term "subroutine" refers to any subroutine-like construct, which have different names and slightly different meanings depending on the [[programming language]] being discussed.}}<ref name="Oracle">{{cite web | title=Passing Information to a Method or a Constructor (The Java™ Tutorials > Learning the Java Language > Classes and Objects) | website=Oracle.com | url=https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html | access-date=2021-09-09 | quote=Parameters refers to the list of variables in a method declaration. Arguments are the actual values that are passed in when the method is invoked. When you invoke a method, the arguments used must match the declaration's parameters in type and order.}}</ref> डेटा के ये भाँग तर्कों के मान हैं<ref>{{cite book|last1=Prata|first1=Stephen|title=सी प्राइम अधिक|date=2004|publisher=Sams|isbn=978-0-672-32696-7|pages=276–277|edition=5th}}</ref><ref>{{cite web|title=वर्किंग ड्राफ्ट, प्रोग्रामिंग लैंग्वेज C++ के लिए मानक|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf|archive-url=https://web.archive.org/web/20051214034042/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf|url-status=dead|archive-date=December 14, 2005|website=www.open-std.org|access-date=1 January 2018}}</ref><ref>{{cite web|last1=Gordon|first1=Aaron|title=उपप्रोग्राम और पैरामीटर पासिंग|url=http://rowdysites.msudenver.edu/~gordona/cs3210/lects/lect10.html|website=rowdysites.msudenver.edu/~gordona|access-date=1 January 2018|archive-url=https://web.archive.org/web/20180101140104/http://rowdysites.msudenver.edu/~gordona/cs3210/lects/lect10.html|archive-date=1 January 2018|url-status=dead}}</ref> (जिन्हें प्रायः ''वास्तविक तर्क'' या ''वास्तविक पैरामीटर'' कहा जाता है) जिसके साथ सबरूटीन को बुलाया/आह्वान किया जा रहा है। मापदंडों की एक आदेशित सूची सामान्यतः एक सबरूटीन की परिभाषा में सम्मिलित होती है, ताकि प्रत्येक बार सबरूटीन को कॉल किया जाए, उस कॉल के लिए इसके तर्कों का मूल्यांकन किया जाता है, और परिणामी मान संबंधित पैरामीटर को नियुक्त किया जा सकता है।
[[कंप्यूटर प्रोग्रामिंग|कंप्यूटर क्रमादेशन]] में, एक पैरामीटर या एक औपचारिक तर्क एक विशेष प्रकार का चर है जिसका उपयोग [[सबरूटीन]] में इनपुट के रूप में प्रदान किए गए डेटा के भाँग में से एक को संदर्भित करने के लिए किया जाता है।{{efn|1=In this article, the term "subroutine" refers to any subroutine-like construct, which have different names and slightly different meanings depending on the [[programming language]] being discussed.}}<ref name="Oracle">{{cite web | title=Passing Information to a Method or a Constructor (The Java™ Tutorials > Learning the Java Language > Classes and Objects) | website=Oracle.com | url=https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html | access-date=2021-09-09 | quote=Parameters refers to the list of variables in a method declaration. Arguments are the actual values that are passed in when the method is invoked. When you invoke a method, the arguments used must match the declaration's parameters in type and order.}}</ref> डेटा के ये भाँग तर्कों के मान हैं<ref>{{cite book|last1=Prata|first1=Stephen|title=सी प्राइम अधिक|date=2004|publisher=Sams|isbn=978-0-672-32696-7|pages=276–277|edition=5th}}</ref><ref>{{cite web|title=वर्किंग ड्राफ्ट, प्रोग्रामिंग लैंग्वेज C++ के लिए मानक|url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf|archive-url=https://web.archive.org/web/20051214034042/http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1905.pdf|url-status=dead|archive-date=December 14, 2005|website=www.open-std.org|access-date=1 January 2018}}</ref><ref>{{cite web|last1=Gordon|first1=Aaron|title=उपप्रोग्राम और पैरामीटर पासिंग|url=http://rowdysites.msudenver.edu/~gordona/cs3210/lects/lect10.html|website=rowdysites.msudenver.edu/~gordona|access-date=1 January 2018|archive-url=https://web.archive.org/web/20180101140104/http://rowdysites.msudenver.edu/~gordona/cs3210/lects/lect10.html|archive-date=1 January 2018|url-status=dead}}</ref> (जिन्हें प्रायः ''वास्तविक तर्क'' या ''वास्तविक पैरामीटर'' कहा जाता है) जिसके साथ सबरूटीन को संबोधित/आह्वान किया जाता है। पैरामीटर की एक आदेशित सूची सामान्यतः एक सबरूटीन की परिभाषा में सम्मिलित होती है, इसलिए प्रत्येक बार सबरूटीन को कॉल किया जाता है, उस कॉल के लिए इसके तर्कों का मूल्यांकन किया जाता है, और परिणामी मान संबंधित पैरामीटर को नियुक्त किया जा सकता है।


सामान्य गणितीय उपयोग में ''तर्क'' के विपरीत, कंप्यूटर विज्ञान में ''तर्क'' एक वास्तविक इनपुट अभिव्यक्ति है जो किसी क्रिया, प्रक्रिया या रूटीन को आह्वान/आह्वान कथन में पास/आपूर्ति करता है, जबकि ''पैरामीटर'' सबरूटीन के कार्यान्वयन के अंदर चर है। उदाहरण के लिए, यदि कोई<code>add</code> सबरूटीन को <code>def add(x, y): return x + y</code>के रूप में परिभाषित करता है, तो <code>x, y</code> पैरामीटर हैं, जबकि अगर इसे<code>add(2, 3)</code>कहा जाता है तब <code>2, 3</code> तर्क हैं। ध्यान दें कि आह्वान संदर्भ से चर (और उसके भाव) तर्क हो सकते हैं: यदि सबरूटीन को <code>a = 2 कहा जाता है; b = 3; add(a, b)</code> तो चर <code>a, b</code> तर्क हैं, मूल्य <code>2, 3</code> नहीं है। अधिक जानकारी के लिए पैरामीटर और तर्क अनुभाग देखें।
सामान्य गणितीय उपयोग में ''तर्क'' के विपरीत, कंप्यूटर विज्ञान में ''तर्क'' एक वास्तविक इनपुट अभिव्यक्ति है जो किसी प्रकार्य, प्रकार्य या रूटीन को आह्वान/आह्वान कथन में पारित/आपूर्ति करती है, जबकि ''पैरामीटर'' सबरूटीन के कार्यान्वयन के अंदर चर है। उदाहरण के लिए, यदि कोई<code>add</code> सबरूटीन को <code>def add(x, y): return x + y</code>के रूप में परिभाषित करता है, तो <code>x, y</code> पैरामीटर हैं, जबकि अगर इसे<code>add(2, 3)</code>कहा जाता है तब <code>2, 3</code> तर्क हैं। ध्यान दें कि आह्वान संदर्भ से चर (और उसके भाव) तर्क हो सकते हैं: यदि सबरूटीन को <code>a = 2 कहा जाता है; b = 3; add(a, b)</code>तो चर <code>a, b</code> तर्क हैं, मूल्य <code>2, 3</code> नहीं है। अधिक जानकारी के लिए पैरामीटर और तर्क अनुभाग देखें।


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


== उदाहरण ==
== उदाहरण ==
C क्रमादेशन भाषा में निम्नलिखित क्रमादेश एक क्रिया को परिभाषित करता है जिसे "सेल्सटैक्स" नाम दिया गया है और इसमें "मूल्य" नाम का एक पैरामीटर है। कीमत का प्रकार "दोगुना" है (अर्थात एक [[तैरनेवाला स्थल|द्विगुण परिशुद्धता]] चल बिंदु संख्या) है। क्रिया का प्रतिफल प्रकार भी दोहरा है।
C क्रमादेशन भाषा में निम्नलिखित क्रमादेश एक प्रकार्य को परिभाषित करता है जिसे "सेल्सटैक्स" नाम दिया गया है और इसमें "मूल्य" नाम का एक पैरामीटर है। मूल्य का प्रकार "दोगुना" (अर्थात एक [[तैरनेवाला स्थल|द्विगुण परिशुद्धता]] चल बिंदु संख्या) है। प्रकार्य का प्रतिफल प्रकार भी दोगुना है।
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
double SalesTax(double price)
double SalesTax(double price)
Line 15: Line 15:
}
}
</syntaxhighlight>
</syntaxhighlight>
क्रिया परिभाषित होने के बाद, इसे निम्नानुसार उपयोजित किया जा सकता है:
प्रकार्य परिभाषित होने के बाद, इसे निम्नानुसार उपयोजित किया जा सकता है:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
SalesTax(10.00);
SalesTax(10.00);
</syntaxhighlight>
</syntaxhighlight>
इस उदाहरण में, क्रिया को तर्क 10.00 के साथ उपयोजित किया गया है। जब ऐसा होता है, तो 10.00 मूल्य निर्धारित किया जाएगा, और क्रिया इसके परिणाम की गणना करना प्रारंभ कर देती है। परिणाम प्रस्तुत करने के कदम नीचे दिए गए हैं, {} में संलग्न हैं। <code>0.05 * price</code> इंगित करता है कि सबसे पहले मूल्य के मूल्य से  0.05 को गुणा करना है, जो 0.50 <code>return</code>देता है जिसका अर्थ है कि क्रिया <code>0.05 * price</code>के परिणाम का उत्पादन करती है। इसलिए, अंतिम परिणाम (बाइनरी अंशों के रूप में दशमलव अंशों का प्रतिनिधित्व करने के साथ सामना करने वाली संभावित निकटन त्रुटियों को उपेक्षित करना) 0.50 है।
इस उदाहरण में, प्रकार्य को तर्क 10.00 के साथ उपयोजित किया गया है। जब ऐसा होता है, तो 10.00 मूल्य निर्धारित किया जाता है, और प्रकार्य इसके परिणाम की गणना करना प्रारंभ कर देता है। परिणाम प्रस्तुत करने के पद नीचे दिए गए हैं, {} में संलग्न हैं। <code>0.05 * price</code> इंगित करता है कि सबसे पहले मूल्य के मूल्य से  0.05 को गुणा करना है, जो 0.50 <code>return</code>देता है जिसका अर्थ है कि प्रकार्य <code>0.05 * price</code>के परिणाम का उत्पादन करता है। इसलिए, अंतिम परिणाम (द्विआधारी अंशों के रूप में दशमलव अंशों का प्रतिनिधित्व करने के साथ सामना करने वाली संभावित निकटन त्रुटियों को उपेक्षित करना) 0.50 है।


== पैरामीटर और तर्क ==
== पैरामीटर और तर्क ==
विभिन्न क्रमादेशन भाषाओं में पैरामीटर और तर्क के अलग-अलग अर्थ हो सकते हैं। कभी-कभी उनका उपयोग परस्पर विनिमय के लिए किया जाता है, और अर्थ को अलग करने के लिए संदर्भ का उपयोग किया जाता है। शब्द पैरामीटर (कभी-कभी औपचारिक पैरामीटर कहा जाता है) का उपयोग प्रायः क्रिया परिभाषा में पाए जाने वाले चर को संदर्भित करने के लिए किया जाता है, जबकि तर्क (कभी-कभी वास्तविक पैरामीटर कहा जाता है) क्रिया कॉल पर प्रदान किए गए वास्तविक इनपुट को संदर्भित करता है। उदाहरण के लिए, यदि कोई क्रिया को<code>def f(x): ...</code> के रूप में परिभाषित करता है, तब <code>x</code> पैरामीटर है, और यदि इसे<code>a = ...;f(a)</code>कहा जाता है तो<code>a</code> तर्क है। एक पैरामीटर एक (अपरिबद्ध) चर है, जबकि तर्क [[शाब्दिक (कंप्यूटर प्रोग्रामिंग)|शाब्दिक (कंप्यूटर क्रमादेशन)]] या चर या अधिक जटिल अभिव्यक्ति हो सकता है जिसमें शाब्दिक और चर सम्मिलित हैं। मान आह्वान के प्रकरण में, क्रिया को जो पास किया जाता है वह तर्क का मान है - उदाहरण के लिए, <code>f(2)</code> और <code>a = 2; f(a)</code> समतुल्य कॉल हैं - संदर्भ द्वारा कॉल करते समय, तर्क के रूप में एक चर के साथ, जो पारित किया जाता है वह उस चर का एक संदर्भ है - भले ही क्रिया कॉल के लिए वाक्य विन्यास वही रह सकता है।<ref>{{Cite web|url=https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/passing-arguments-by-value-and-by-reference|title=मूल्य और संदर्भ द्वारा तर्क पास करना (विजुअल बेसिक)|last=Dollard|first=Kathleen|website=docs.microsoft.com|language=en-us|access-date=2018-10-27}}</ref> क्रिया घोषणा और/या परिभाषा में उत्तीर्ण-द्वारा-संदर्भ या उत्तीर्ण-द्वारा-मूल्य के लिए विनिर्देश बनाए जाएंगे।
विभिन्न क्रमादेशन भाषाओं में पैरामीटर और तर्क के अलग-अलग अर्थ हो सकते हैं। कभी-कभी उनका उपयोग परस्पर विनिमय के लिए किया जाता है, और अर्थ को अलग करने के लिए संदर्भ का उपयोग किया जाता है। पैरामीटर शब्द (कभी-कभी औपचारिक पैरामीटर कहा जाता है) का उपयोग प्रायः प्रकार्य परिभाषा में पाए जाने वाले चर को संदर्भित करने के लिए किया जाता है, जबकि तर्क (कभी-कभी वास्तविक पैरामीटर कहा जाता है) प्रकार्य कॉल पर प्रदान किए गए वास्तविक इनपुट को संदर्भित करता है। उदाहरण के लिए, यदि कोई प्रकार्य को<code>def f(x): ...</code> के रूप में परिभाषित करता है, तब <code>x</code> पैरामीटर है, और यदि इसे<code>a = ...;f(a)</code>कहा जाता है तो<code>a</code> तर्क है। पैरामीटर एक (अपरिबद्ध) चर है, जबकि तर्क [[शाब्दिक (कंप्यूटर प्रोग्रामिंग)|शाब्दिक (कंप्यूटर क्रमादेशन)]] या चर या अधिक जटिल अभिव्यक्ति हो सकता है जिसमें शाब्दिक और चर सम्मिलित हैं। मान आह्वान के प्रकरण में, प्रकार्य को जो पारित किया जाता है वह तर्क का मान है - उदाहरण के लिए, <code>f(2)</code> और <code>a = 2; f(a)</code> समतुल्य कॉल हैं - संदर्भ द्वारा कॉल करते समय, तर्क के रूप में एक चर के साथ, जो पारित किया जाता है वह उस चर का एक संदर्भ है - यद्यपि प्रकार्य कॉल के लिए वाक्य विन्यास समान रह सकता है।<ref>{{Cite web|url=https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/passing-arguments-by-value-and-by-reference|title=मूल्य और संदर्भ द्वारा तर्क पास करना (विजुअल बेसिक)|last=Dollard|first=Kathleen|website=docs.microsoft.com|language=en-us|access-date=2018-10-27}}</ref> प्रकार्य घोषित और/या परिभाषा में उत्तीर्ण-द्वारा-संदर्भ या उत्तीर्ण-द्वारा-मूल्य के लिए विनिर्देश बनाए जाते है।


प्रक्रिया परिभाषाओं में पैरामीटर दिखाई देता हैं; प्रक्रिया कॉल में तर्क प्रकट होते हैं। क्रिया परिभाषा में <code>f(x) = x*x</code> चर <var>x</var> एक पैरामीटर है; क्रिया कॉल में <code>f(2)</code> मान 2 क्रिया का तर्क है। संक्षेप में, एक पैरामीटर एक प्रकार है, और एक तर्क एक उदाहरण है।
प्रकार्य परिभाषाओं में पैरामीटर दिखाई देता हैं; प्रकार्य कॉल में तर्क प्रकट होते हैं। प्रकार्य परिभाषा में <code>f(x) = x*x</code> चर <var>x</var> एक पैरामीटर है; प्रकार्य कॉल में <code>f(2)</code> मान 2 प्रकार्य का तर्क है। संक्षेप में, एक पैरामीटर एक प्रकार है, और एक तर्क उदाहरण है।


एक पैरामीटर प्रक्रिया का एक आंतरिक गुण है, इसकी परिभाषा में सम्मिलित है। उदाहरण के लिए, कई भाषाओं में, दो प्रदान किए गए पूर्णांकों को एक साथ जोड़ने और योग की गणना करने की प्रक्रिया में प्रत्येक पूर्णांक के लिए एक, दो पैरामीटर की आवश्यकता होती है। सामान्य रूप में, एक प्रक्रिया को कई मापदंडों के साथ परिभाषित किया जा सकता है, या कोई भी पैरामीटर के साथ परिभाषित नहीं किया जा सकता है। यदि किसी प्रक्रिया में पैरामीटर हैं, तो उसकी परिभाषा का वह भाग जो पैरामीटर निर्दिष्ट करता है, उसकी पैरामीटर सूची कहलाता है।
एक पैरामीटर प्रकार्य का एक आंतरिक गुण है, इसकी परिभाषा में सम्मिलित है। उदाहरण के लिए, कई भाषाओं में, दो प्रदान किए गए पूर्णांकों को एक साथ जोड़ने और योग की गणना करने के प्रकार्य में प्रत्येक पूर्णांक के लिए एक, दो पैरामीटर की आवश्यकता होती है। सामान्य रूप में, एक प्रकार्य को कई पैरामीटर के साथ परिभाषित किया जा सकता है, या कोई भी पैरामीटर के साथ परिभाषित नहीं किया जा सकता है। यदि किसी प्रकार्य में पैरामीटर हैं, तो उसकी परिभाषा का वह भाग जो पैरामीटर निर्दिष्ट करता है, उसकी पैरामीटर सूची कहलाता है।


इसके विपरीत, <ref>{{Cite web|url=http://crasseux.com/books/ctutorial/Actual-parameters-and-formal-parameters.html|title=जीएनयू सी प्रोग्रामिंग ट्यूटोरियल|website=crasseux.com|language=en|access-date=2018-10-27}}</ref> तर्क उस प्रक्रिया को प्रदान किए गए भाव हैं जब इसे कहा जाता है, सामान्यतः एक अभिव्यक्ति जो किसी एक पैरामीटर से अनुकूल है। मापदंडों के विपरीत, जो प्रक्रिया की परिभाषा का एक अपरिवर्तनीय भाग है, तर्क कॉल से कॉल में भिन्न हो सकता हैं। प्रत्येक बार एक प्रक्रिया को कॉल किया जाता है, प्रक्रिया कॉल का भाग जो तर्कों को निर्दिष्ट करता है उसे तर्क सूची कहा जाता है।
इसके विपरीत, <ref>{{Cite web|url=http://crasseux.com/books/ctutorial/Actual-parameters-and-formal-parameters.html|title=जीएनयू सी प्रोग्रामिंग ट्यूटोरियल|website=crasseux.com|language=en|access-date=2018-10-27}}</ref> तर्क उस प्रकार्य को प्रदान किए गए भाव हैं जब इसे कहा जाता है, सामान्यतः एक अभिव्यक्ति जो किसी एक पैरामीटर से अनुकूल है। पैरामीटर के विपरीत, जो प्रकार्य की परिभाषा का एक अपरिवर्तनीय भाग है, तर्क कॉल से कॉल में भिन्न हो सकता हैं। प्रत्येक बार एक प्रकार्य को कॉल किया जाता है, प्रकार्य कॉल का भाग जो तर्कों को निर्दिष्ट करता है उसे तर्क सूची कहा जाता है।


यद्यपि मापदंडों को सामान्यतः तर्कों के रूप में संदर्भित किया जाता है, तर्कों को कभी-कभी वास्तविक मान या पैरामीटर चर के संदर्भ के रूप में माना जाता है जब सबरूटीन को कार्यावधि पर बुलाया जाता है। सबरूटीन में कॉल करने वाले कोड पर चर्चा करते समय, सबरूटीन में पारित कोई भी मान या संदर्भ तर्क होते हैं, और कोड में वह स्थान जहां ये मान या संदर्भ दिए जाते हैं, पैरामीटर सूची है। सबरूटीन परिभाषा के अंदर कोड पर चर्चा करते समय, सबरूटीन की पैरामीटर सूची में चर पैरामीटर होते हैं, जबकि कार्यावधि पर पैरामीटर के मान तर्क होते हैं। उदाहरण के लिए, C में, क्रम से वितरण के समय शून्य * प्रकार के तर्क में पास होना सामान्य बात है और इसे अपेक्षित प्रकार में डाला जाता है:
यद्यपि पैरामीटर को सामान्यतः तर्कों के रूप में संदर्भित किया जाता है, तर्कों को कभी-कभी वास्तविक मान या पैरामीटर चर के संदर्भ के रूप में माना जाता है जब सबरूटीन को कार्यावधि पर संबोधित किया जाता है। सबरूटीन में कॉल करने वाले कोड पर बातचित करते समय, सबरूटीन में पारित कोई भी मान या संदर्भ तर्क होते हैं, और कोड में वह स्थान जहां ये मान या संदर्भ दिए गए हैं, वह पैरामीटर सूची है। सबरूटीन परिभाषा के अंतर्गत कोड पर बातचित करते समय, सबरूटीन की पैरामीटर सूची में चर पैरामीटर हैं, जबकि कार्यावधि पर पैरामीटर के मान तर्क हैं। उदाहरण के लिए, C में, क्रम से वितरण के समय शून्य * प्रकार के तर्क में पारित होना सामान्य बात है और इसे अपेक्षित प्रकार में विक्षेप किया जाता है:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
void ThreadFunction(void* pThreadArgument)
void ThreadFunction(void* pThreadArgument)
Line 40: Line 40:
}
}
</syntaxhighlight>
</syntaxhighlight>
अंतर को अधिक समझने के लिए, C में लिखे गए निम्नलिखित क्रिया पर विचार करें:
अंतर को अधिक समझने के लिए, C में लिखे गए निम्नलिखित प्रकार्य पर विचार करें:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
int Sum(int addend1, int addend2)
int Sum(int addend1, int addend2)
Line 47: Line 47:
}
}
</syntaxhighlight>
</syntaxhighlight>
क्रिया योग के दो पैरामीटर हैं, जिनका नाम addend1 और addend2 है। यह मापदंडों में दिए गए मान जोड़ता है, और सबरूटीन के कॉलर को परिणाम देता है (C अनुभाषक द्वारा स्वचालित रूप से आपूर्ति की गई तकनीक का उपयोग करके)।
प्रकार्य योग के दो पैरामीटर हैं, जिनका नाम addend1 और addend2 है। यह पैरामीटर में दिए गए मान जोड़ता है, और सबरूटीन के कॉलर को परिणाम देता है (C अनुभाषक द्वारा स्वचालित रूप से आपूर्ति की गई तकनीक का उपयोग करके)।


सम क्रिया को कॉल करने वाला कोड इस तरह दिखाई दे सकता है:
सम प्रकार्य को कॉल करने वाला कोड इस तरह दिखाई दे सकता है:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
int value1 = 40;
int value1 = 40;
Line 55: Line 55:
int sum_value = Sum(value1, value2);
int sum_value = Sum(value1, value2);
</syntaxhighlight>
</syntaxhighlight>
चर value1 और value2 मानों के साथ प्रारंभ किए गए हैं। इस संदर्भ में, value1 और value2, दोनों योग क्रिया के लिए तर्क हैं।
चर value1 और value2 मानों के साथ प्रारंभ किए गए हैं। इस संदर्भ में, value1 और value2, दोनों योग प्रकार्य के लिए तर्क हैं।


कार्यावधि पर, इन परिवर्त्य को नियुक्त किए गए मान क्रिया योग को तर्कों के रूप में पास किए जाते हैं। Sum क्रिया में, पैरामीटर addend1 और addend2 का मूल्यांकन किया जाता है, जिससे क्रमशः तर्क 40 और 2 प्राप्त होते हैं। तर्कों के मान जोड़े जाते हैं, और परिणाम कॉलर को वापस कर दिया जाता है, जहां इसे चर योग मूल्य को नियुक्त किया जाता है।
कार्यावधि पर, इन परिवर्त्य को नियुक्त किए गए मान प्रकार्य योग को तर्कों के रूप में पारित किया जाता है। योग प्रकार्य में, पैरामीटर addend1 और addend2 का मूल्यांकन किया जाता है, जिससे क्रमशः तर्क 40 और 2 प्राप्त किया जाता है। तर्कों के मान जोड़े जाते हैं, और परिणाम कॉलर को वापस कर दिया जाता है, जहां इसे चर योग मूल्य को नियुक्त किया जाता है।


मापदंडों और तर्कों के मध्य अंतर के कारण, किसी प्रक्रिया को अनुचित तर्क देना संभव है। कॉल बहुत अधिक या बहुत कम तर्क प्रदान कर सकती है; एक या अधिक तर्क गलत प्रकार के हो सकते हैं; या तर्क गलत क्रम में दिए जा सकते हैं। इनमें से कोई भी स्थिति पैरामीटर और तर्क सूचियों के मध्य अवतरण का कारण बनती है, और प्रक्रिया प्रायः अनपेक्षित उत्तर देती है या [[रनटाइम त्रुटि|कार्यावधि त्रुटि]] उत्पन्न करती है।
पैरामीटर और तर्कों के मध्य अंतर के कारण, किसी प्रकार्य को अनुचित तर्क देना संभव है। कॉल बहुत अधिक या बहुत कम तर्क प्रदान कर सकता है; एक या अधिक तर्क गलत प्रकार के हो सकते हैं; या तर्क गलत क्रम में दिए जा सकते हैं। इनमें से कोई भी स्थिति पैरामीटर और तर्क सूचियों के मध्य अवतरण का कारण बनती है, और प्रकार्य प्रायः अनपेक्षित उत्तर देता है या [[रनटाइम त्रुटि|कार्यावधि त्रुटि]] उत्पन्न करता है।


=== एफिल में वैकल्पिक सम्मेलन ===
=== एफिल में वैकल्पिक सम्मेलन ===
एफिल सॉफ्टवेयर विकास पद्धति और भाषा के अंतर्गत, शर्तों के तर्क और पैरामीटर के अलग-अलग उपयोग सम्मेलन द्वारा स्थापित किए गए हैं। शब्द तर्क विशेष रूप से नियमित इनपुट के संदर्भ में प्रयोग किए जाते है,<ref>Meyer, Bertrand. ''[[Object-Oriented Software Construction]], 2nd Edition,'' Prentice Hall, 1997, p 444.</ref> और अवधि पैरामीटर का उपयोग विशेष रूप से[[ सामान्य प्रोग्रामिंग | सामान्य वर्गों]] के लिए प्रकार पैरामीटरकरण में किया जाता है।<ref>Meyer, p. 96.</ref>
एफिल सॉफ्टवेयर विकास पद्धति और भाषा के अंतर्गत, संबंध के तर्क और पैरामीटर के अलग-अलग उपयोग सम्मेलन द्वारा स्थापित किए गए हैं। शब्द तर्क विशेष रूप से नियमित इनपुट के संदर्भ में प्रयोग किए जाते है,<ref>Meyer, Bertrand. ''[[Object-Oriented Software Construction]], 2nd Edition,'' Prentice Hall, 1997, p 444.</ref> और अवधि पैरामीटर का उपयोग विशेष रूप से[[ सामान्य प्रोग्रामिंग | सामान्य वर्गों]] के लिए प्रकार पैरामीटरकरण में किया जाता है।<ref>Meyer, p. 96.</ref>


निम्नलिखित नियमित परिभाषा पर विचार करें:
निम्नलिखित नियमित परिभाषा पर विचार करें:
Line 72: Line 72:
         end
         end
</syntaxhighlight>
</syntaxhighlight>
रूटीन <code>sum</code> में दो तर्क होते हैं <code>addend1</code> और <code>addend2</code>, जिन्हें रूटीन का औपचारिक तर्क कहा जाता है। कॉल से <code>sum</code> वास्तविक तर्कों को निर्दिष्ट करता है, जैसा कि <code>value1</code> और <code>value2</code>के साथ नीचे दिखाया गया है।
रूटीन <code>sum</code> में दो तर्क होते हैं<code>addend1</code> और <code>addend2</code>, जिन्हें रूटीन का औपचारिक तर्क कहा जाता है। कॉल से <code>sum</code> वास्तविक तर्कों को निर्दिष्ट करता है, जैसा कि<code>value1</code> और <code>value2</code>के साथ नीचे दिखाया गया है।


<syntaxhighlight lang="eiffel">
<syntaxhighlight lang="eiffel">
Line 81: Line 81:
             sum_value := sum (value1, value2)     
             sum_value := sum (value1, value2)     
</syntaxhighlight>
</syntaxhighlight>
पैरामीटर को या तो '''औपचारिक''' या '''वास्तविक''' माना जाता है। सामान्य वर्ग की परिभाषा में औपचारिक सामान्य पैरामीटर का उपयोग किया जाता है। नीचे दिए गए उदाहरण में, class <code>HASH_TABLE</code> एक सामान्य वर्ग के रूप में घोषित किया गया है जिसमें दो औपचारिक सामान्य पैरामीटर हैं, <code>G</code> ब्याज के डेटा का प्रतिनिधित्व करता है और<code>K</code> डेटा के लिए हैश कुंजी का प्रतिनिधित्व करता है:
पैरामीटर को या तो '''औपचारिक''' या '''वास्तविक''' माना जाता है। सामान्य वर्ग की परिभाषा में औपचारिक सामान्य पैरामीटर का उपयोग किया जाता है। नीचे दिए गए उदाहरण में, class <code>HASH_TABLE</code> एक सामान्य वर्ग के रूप में अभिप्रेत किया गया है जिसमें दो औपचारिक सामान्य पैरामीटर हैं, <code>G</code> प्रभावित डेटा का प्रतिनिधित्व करता है और<code>K</code> डेटा के लिए हैश कुंजी का प्रतिनिधित्व करता है:


<syntaxhighlight lang="eiffel">
<syntaxhighlight lang="eiffel">
Line 87: Line 87:
             …
             …
</syntaxhighlight>
</syntaxhighlight>
जब एक वर्ग <code>HASH_TABLE का</code>ग्राहक बन जाता है, तो सामान्य व्युत्पत्ति में औपचारिक सामान्य मापदंडों को वास्तविक सामान्य मापदंडों के साथ प्रतिस्थापित किया जाता है। निम्नलिखित विशेषता घोषणा में, <code>my_dictionary</code> एक वर्ण स्ट्रिंग आधारित [[साहचर्य सरणी|शब्दकोश]] के रूप में उपयोग किया जाना है। इस प्रकार, डेटा और प्रमुख औपचारिक सामान्य पैरामीटर दोनों को <code>STRING</code> प्रकार के वास्तविक सामान्य पैरामीटर के साथ प्रतिस्थापित किया जाता है।
जब एक वर्ग <code>HASH_TABLE का</code>ग्राहक बन जाता है, तो सामान्य व्युत्पत्ति में औपचारिक सामान्य पैरामीटर को वास्तविक सामान्य पैरामीटर के साथ प्रतिस्थापित किया जाता है। निम्नलिखित विशेषता विवरण में, <code>my_dictionary</code> एक वर्ण स्ट्रिंग आधारित [[साहचर्य सरणी|शब्दकोश]] के रूप में उपयोग किया जाता है। इस प्रकार, डेटा और प्रमुख औपचारिक सामान्य पैरामीटर दोनों को <code>STRING</code> प्रकार के वास्तविक सामान्य पैरामीटर के साथ प्रतिस्थापित किया जाता है।


<syntaxhighlight lang="eiffel">
<syntaxhighlight lang="eiffel">
Line 94: Line 94:


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


कुछ भाषाएँ यह इंगित करने के लिए एक विशेष संकेत शब्द (जैसे शून्य) का उपयोग करती हैं कि सबरूटीन का कोई पैरामीटर नहीं है; औपचारिक [[प्रकार सिद्धांत|प्रकार के सिद्धांत]] में, ऐसे कार्य एक रिक्त पैरामीटर सूची लेते हैं (जिसका प्रकार शून्य नहीं है, अथवा [[इकाई प्रकार|इकाई]] है)।
कुछ भाषाएँ यह इंगित करने के लिए एक विशेष संकेत शब्द (जैसे शून्य) का उपयोग करती हैं कि सबरूटीन का कोई पैरामीटर नहीं है; औपचारिक [[प्रकार सिद्धांत|प्रकार के सिद्धांत]] में, ऐसे कार्य एक रिक्त पैरामीटर सूची लेते हैं (जिसका प्रकार शून्य नहीं है, अथवा [[इकाई प्रकार|इकाई]] है)।


== प्राचर पारण ==
== प्राचर पारण ==
मापदंडों को तर्क देने के लिए यथार्थ प्रक्रिया, जिसे तर्क पारित करना कहा जाता है, उस पैरामीटर के लिए उपयोग की जाने वाली मूल्यांकन रणनीति पर निर्भर करता है (सामान्यतः मूल्य द्वारा कॉल किया जाता है), जिसे संकेत शब्द का उपयोग करके निर्दिष्ट किया जा सकता है।
पैरामीटर को तर्क देने के लिए यथार्थ प्रकार्य, जिसे तर्क पारित करना कहा जाता है, उस पैरामीटर के लिए उपयोग की जाने वाली मूल्यांकन रणनीति पर निर्भर करता है (सामान्यतः मूल्य द्वारा कॉल किया जाता है), जिसे संकेत शब्द का उपयोग करके निर्दिष्ट किया जा सकता है।


=== व्यतिक्रम तर्क ===
=== व्यतिक्रम तर्क ===
कुछ क्रमादेशन भाषा जैसे Ada (क्रमादेशन भाषा), [[C++]], [[क्लोजर]],{{Citation needed|date=June 2021}} [[सामान्य लिस्प]],<ref>{{Cite web|title=कार्य|url=https://gigamonkeys.com/book/functions.html|access-date=2021-06-02|website=gigamonkeys.com}}</ref> [[फोरट्रान 90]],<ref>{{Cite web|title=वैकल्पिक तर्क|url=http://www.netlib.org/ccm/page/api/optional.html|access-date=2021-06-02|website=www.netlib.org}}</ref> पायथन (क्रमादेशन भाषा), [[ रूबी (प्रोग्रामिंग भाषा) | रूबी (क्रमादेशन भाषा)]] , Tcl (क्रमादेशन भाषा), और [[विंडोज पॉवरशेल]]{{Citation needed|date=June 2021}} सबरूटीन की घोषणा में स्पष्ट या निहित रूप से दिए जाने वाले [[डिफ़ॉल्ट तर्क|व्यतिक्रम तर्क]] की अनुमति देते हैं। यह कॉल करने वाले को सबरूटीन को कॉल करते समय उस तर्क को छोड़ने की अनुमति देते है। यदि व्यतिक्रम तर्क स्पष्ट रूप से दिया गया है, तो कॉलर द्वारा प्रदान नहीं किए जाने पर उस मान का उपयोग किया जाता है। यदि व्यतिक्रम तर्क निहित है (कभी-कभी वैकल्पिक जैसे संकेत शब्द का उपयोग करके) तो कॉलर द्वारा कोई मान प्रदान नहीं किए जाने पर भाषा एक प्रसिद्ध मान (जैसे शून्य सूचक, रिक्त, शून्य, एक रिक्त स्ट्रिंग, आदि) प्रदान करती है।
कुछ क्रमादेशन भाषा जैसे Ada (क्रमादेशन भाषा), [[C++]], [[क्लोजर]],{{Citation needed|date=June 2021}} [[सामान्य लिस्प]],<ref>{{Cite web|title=कार्य|url=https://gigamonkeys.com/book/functions.html|access-date=2021-06-02|website=gigamonkeys.com}}</ref> [[फोरट्रान 90]],<ref>{{Cite web|title=वैकल्पिक तर्क|url=http://www.netlib.org/ccm/page/api/optional.html|access-date=2021-06-02|website=www.netlib.org}}</ref> पायथन (क्रमादेशन भाषा), [[ रूबी (प्रोग्रामिंग भाषा) | रूबी (क्रमादेशन भाषा)]] , Tcl (क्रमादेशन भाषा), और [[विंडोज पॉवरशेल]]{{Citation needed|date=June 2021}} सबरूटीन की विवरण में स्पष्ट या निहित रूप से दिए जाने वाले [[डिफ़ॉल्ट तर्क|व्यतिक्रम तर्क]] की अनुमति देते हैं। यह कॉल करने वाले को सबरूटीन कॉल करते समय उस तर्क को छोड़ने की अनुमति देते है। यदि व्यतिक्रम तर्क स्पष्ट रूप से दिया गया है, तो कॉलर द्वारा प्रदान नहीं किए जाने पर उस मान का उपयोग किया जाता है। यदि व्यतिक्रम तर्क निहित है (कभी-कभी वैकल्पिक जैसे संकेत शब्द का उपयोग करके) तो कॉलर द्वारा कोई मान प्रदान नहीं किए जाने पर भाषा एक प्रसिद्ध मान (जैसे शून्य सूचक, रिक्त, शून्य, एक रिक्त स्ट्रिंग, आदि) प्रदान करती है।


पॉवरशेल उदाहरण:
पॉवरशेल उदाहरण:
Line 121: Line 121:


=== चर-लंबाई पैरामीटर सूची ===
=== चर-लंबाई पैरामीटर सूची ===
कुछ भाषाएँ तर्कों की एक चर संख्या को स्वीकार करने के लिए [[वैराडिक फ़ंक्शन|सबरूटीन]] को परिभाषित करने की अनुमति देती हैं। ऐसी भाषाओं के लिए, सबरूटीन को तर्कों की सूची के माध्यम से पुनरावृति करनी चाहिए।
कुछ भाषाएँ तर्कों की चर संख्या को स्वीकार करने के लिए [[वैराडिक फ़ंक्शन|सबरूटीन]] को परिभाषित करने की अनुमति देती हैं। ऐसी भाषाओं के लिए, सबरूटीन को तर्कों की सूची के माध्यम से पुनरावृति करना चाहिए।


पॉवरशेल उदाहरण:
पॉवरशेल उदाहरण:
Line 139: Line 139:
</syntaxhighlight>
</syntaxhighlight>
=== नामित पैरामीटर ===
=== नामित पैरामीटर ===
कुछ क्रमादेशन भाषा- जैसे एडा (क्रमादेशन भाषा) और विंडोज पॉवरशेल- सबरूटीन्स को नामित पैरामीटर रखने की अनुमति देती हैं। यह आह्वान कोड को अधिक स्व-दस्तावेजीकरण करने की अनुमति देती है। यह कॉल करने वाले को अधिक नम्यता भी प्रदान करता है, प्रायः तर्कों के क्रम को बदलने की अनुमति देता है, या आवश्यकतानुसार तर्कों को छोड़ दिया जाता है।
कुछ क्रमादेशन भाषा- जैसे एडा (क्रमादेशन भाषा) और विंडोज पॉवरशेल- सबरूटीन्स को नामित पैरामीटर रखने की अनुमति देते हैं। यह आह्वान कोड को अधिक स्व-दस्तावेजीकरण करने की अनुमति देते है। यह कॉल करने वाले को अधिक नम्यता भी प्रदान करते है, प्रायः तर्कों के क्रम को बदलने की अनुमति देते है, या आवश्यकतानुसार तर्कों को छोड़ देते है।


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


== आउटपुट पैरामीटर ==
== आउटपुट पैरामीटर ==
आउटपुट पैरामीटर, जिसे आउट पैरामीटर या प्रतिफल पैरामीटर के रूप में भी जाना जाता है, इनपुट के अधिक सामान्य उपयोग के बदले आउटपुट के लिए उपयोग किया जाने वाला पैरामीटर है। संदर्भ मापदंडों द्वारा कॉल का उपयोग करना, या मूल्य मापदंडों द्वारा कॉल करना जहां मूल्य एक संदर्भ है, क्योंकि आउटपुट पैरामीटर कुछ भाषाओं में एक मुहावरा है, विशेष रूप से C और C++,{{efn|C and C++ are call by value, but if type is a reference (a C/C++ pointer or C++ reference), then setting the value of the reference can be used to produce call by reference style behavior.}} जबकि अन्य भाषाओं में आउटपुट पैरामीटर के लिए अंतर्निहित समर्थन है। आउटपुट पैरामीटर के लिए अंतर्निहित समर्थन वाली भाषाओं में एडा <ref name=ada>[http://archive.adaic.com/standards/83rat/html/ratl-08-02.html 8.2 Parameter Modes], "[http://archive.adaic.com/standards/83rat/html/Welcome.html Rationale for the Design of the Ada® Programming Language]"</ref> (क्रमादेशन भाषा देखें), [[फोरट्रान]] (फोरट्रान 90 के बाद से; फोरट्रान "उद्देश्य" देखें)), [[एसक्यूएल|SQL]] के लिए विभिन्न प्रक्रियात्मक विस्तार, जैसे [[PL/SQL]] ([[PL/SQL]] क्रिया देखें)<ref>[http://docs.oracle.com/cd/B10500_01/appdev.920/a96624/08_subs.htm#895 8. PL/SQL Subprograms: Specifying Subprogram Parameter Modes]</ref> और [[Transact-SQL]], C Sharp <ref name=hallam>{{cite web
आउटपुट पैरामीटर, जिसे आउट पैरामीटर या प्रतिफल पैरामीटर के रूप में भी जाना जाता है, इनपुट के अधिक सामान्य उपयोग के बदले आउटपुट के लिए उपयोग किया जाने वाला पैरामीटर है। संदर्भ पैरामीटर द्वारा कॉल का उपयोग करना, या मूल्य पैरामीटर द्वारा कॉल करना जहां मूल्य एक संदर्भ है, क्योंकि आउटपुट पैरामीटर कुछ भाषाओं में एक मुहावरा है, विशेष रूप से C और C++,{{efn|C and C++ are call by value, but if type is a reference (a C/C++ pointer or C++ reference), then setting the value of the reference can be used to produce call by reference style behavior.}} जबकि अन्य भाषाओं में आउटपुट पैरामीटर के लिए अंतर्निहित समर्थन है। आउटपुट पैरामीटर के लिए अंतर्निहित समर्थन वाली भाषाओं में एडा <ref name=ada>[http://archive.adaic.com/standards/83rat/html/ratl-08-02.html 8.2 Parameter Modes], "[http://archive.adaic.com/standards/83rat/html/Welcome.html Rationale for the Design of the Ada® Programming Language]"</ref> (क्रमादेशन भाषा देखें), [[फोरट्रान]] (फोरट्रान 90 के बाद से; फोरट्रान "उद्देश्य" देखें)), [[एसक्यूएल|SQL]] के लिए विभिन्न प्रकार्यत्मक विस्तार, जैसे [[PL/SQL]] ([[PL/SQL]] प्रकार्य देखें)<ref>[http://docs.oracle.com/cd/B10500_01/appdev.920/a96624/08_subs.htm#895 8. PL/SQL Subprograms: Specifying Subprogram Parameter Modes]</ref> और [[Transact-SQL]], C Sharp <ref name=hallam>{{cite web
|title=Why does C# have both 'ref' and 'out'?
|title=Why does C# have both 'ref' and 'out'?
|author=Peter Hallam
|author=Peter Hallam
|url=http://msdn.microsoft.com/en-us/vcsharp/aa336814.aspx
|url=http://msdn.microsoft.com/en-us/vcsharp/aa336814.aspx
|archive-url=https://web.archive.org/web/20110926113834/http://msdn.microsoft.com/en-us/vcsharp/aa336814.aspx
|archive-url=https://web.archive.org/web/20110926113834/http://msdn.microsoft.com/en-us/vcsharp/aa336814.aspx
|archive-date=2011-09-26}}</ref> और .NET फ्रेमवर्क,<ref>[http://msdn.microsoft.com/en-us/library/system.data.parameterdirection.aspx ParameterDirection Enumeration]</ref> [[स्विफ्ट (प्रोग्रामिंग भाषा)|स्विफ्ट (क्रमादेशन भाषा)]],<ref>[https://docs.swift.org/swift-book/LanguageGuide/Functions.html Functions — The Swift Programming Language (Swift 4.2)]</ref> और लिपिन्यास भाषा [[टीस्क्रिप्ट]] (टीस्क्रिप्ट क्रिया घोषणा) सम्मलित है।
|archive-date=2011-09-26}}</ref> और .NET संरचना,<ref>[http://msdn.microsoft.com/en-us/library/system.data.parameterdirection.aspx ParameterDirection Enumeration]</ref> [[स्विफ्ट (प्रोग्रामिंग भाषा)|स्विफ्ट (क्रमादेशन भाषा)]],<ref>[https://docs.swift.org/swift-book/LanguageGuide/Functions.html Functions — The Swift Programming Language (Swift 4.2)]</ref> और लिपिन्यास भाषा [[टीस्क्रिप्ट]] (टीस्क्रिप्ट प्रकार्य विवरण) सम्मलित है।


अधिक निश्चित रूप से, कोई तीन प्रकार के पैरामीटर या पैरामीटर विधि में अंतर कर सकता है: ''{{visible anchor|इनपुट पैरामीटर}}, आउटपुट पैरामीटर, और {{visible anchor|इनपुट/आउटपुट पैरामीटर}}; इन्हें प्रायः <code>in</code>, <code>out</code>, और <code>in out</code> या <code>inout</code>''के रूप में दर्शाया जाता है। एक इनपुट तर्क (इनपुट पैरामीटर के लिए तर्क) एक मान होना चाहिए, जैसे प्रारंभिक चर या शाब्दिक, और इसे फिर से परिभाषित या नियुक्त नहीं किया जाना चाहिए; एक आउटपुट तर्क एक नियुक्त करने योग्य चर होना चाहिए, लेकिन इसे प्रारंभ करने की आवश्यकता नहीं है, कोई स्थित मान पहुंच योग्य नहीं है, और इसे एक मान निर्दिष्ट किया जाना चाहिए; और एक इनपुट/आउटपुट तर्क एक प्रारंभिक, नियुक्त करने योग्य चर होना चाहिए, और वैकल्पिक रूप से एक मान नियुक्त किया जा सकता है। भाषाओं के मध्य यथार्थ आवश्यकताएं और प्रवर्तन अलग-अलग होते हैं - उदाहरण के लिए, [[Ada 83]] में आउटपुट पैरामीटर केवल नियतन के बाद भी नियुक्त किए, पढ़े नहीं जा सकते हैं (इसे [[Ada 95]] में एक सहायक संचायक चर की आवश्यकता को हटाने के लिए हटा दिया गया था)। ये एक r-मूल्य (एक मूल्य है), एक l-मूल्य (नियुक्त किया जा सकता है), या एक r-मूल्य/l-मूल्य (एक मूल्य है) के अभिव्यक्ति में[[ मूल्य (कंप्यूटर विज्ञान) | मूल्य (कंप्यूटर विज्ञान)]] की धारणा के अनुरूप हैं), क्रमशः, हालांकि इन शब्दों का C में विशेष अर्थ है।
अधिक निश्चित रूप से, कोई तीन प्रकार के पैरामीटर या पैरामीटर विधि में अंतर कर सकते है: ''{{visible anchor|इनपुट पैरामीटर}}, आउटपुट पैरामीटर, और {{visible anchor|इनपुट/आउटपुट पैरामीटर}}; इन्हें प्रायः <code>in</code>, <code>out</code>, और <code>in out</code> या <code>inout</code>''के रूप में दर्शाया जाता है। एक इनपुट तर्क (इनपुट पैरामीटर के लिए तर्क) एक मान होना चाहिए, जैसे प्रारंभिक चर या शाब्दिक, और इसे फिर से परिभाषित या नियुक्त नहीं किया जाना चाहिए; एक आउटपुट तर्क एक नियुक्त करने योग्य चर होना चाहिए, लेकिन इसे प्रारंभ करने की आवश्यकता नहीं है, कोई स्थित मान पहुंच योग्य नहीं है, और इसे एक मान निर्दिष्ट किया जाना चाहिए; और एक इनपुट/आउटपुट तर्क एक प्रारंभिक, नियुक्त करने योग्य चर होना चाहिए, और वैकल्पिक रूप से एक मान नियुक्त किया जा सकता है। भाषाओं के मध्य यथार्थ आवश्यकताएं और प्रवर्तन अलग-अलग होते हैं - उदाहरण के लिए, [[Ada 83]] में आउटपुट पैरामीटर केवल नियतन के बाद भी नियुक्त किए, पढ़े नहीं जा सकते हैं (इसे [[Ada 95]] में एक सहायक संचायक चर की आवश्यकता को हटाने के लिए हटा दिया गया था)। ये एक r-मूल्य (एक मूल्य है), एक l-मूल्य (नियुक्त किया जा सकता है), या एक r-मूल्य/l-मूल्य (एक मूल्य है) के अभिव्यक्ति में[[ मूल्य (कंप्यूटर विज्ञान) | मूल्य (कंप्यूटर विज्ञान)]] की धारणा के अनुरूप हैं), क्रमशः, हालांकि इन शब्दों का C में विशेष अर्थ है।


कुछ प्रकरणों में केवल इनपुट और इनपुट/आउटपुट को अलग किया जाता है, आउटपुट को इनपुट/आउटपुट का एक विशिष्ट उपयोग माना जाता है, और अन्य प्रकरणों में केवल इनपुट और आउटपुट (लेकिन इनपुट/आउटपुट नहीं) समर्थित होते हैं। व्यतिक्रम अवस्था भाषाओं के मध्य भिन्न होते है: फोरट्रान में 90 इनपुट/आउटपुट व्यतिक्रम है, जबकि C# और SQL विस्तार में इनपुट व्यतिक्रम है, और TScript में प्रत्येक पैरामीटर को इनपुट या आउटपुट के रूप में स्पष्ट रूप से निर्दिष्ट किया गया है।
कुछ प्रकरणों में केवल इनपुट और इनपुट/आउटपुट को अलग किया जाता है, आउटपुट को इनपुट/आउटपुट का एक विशिष्ट उपयोग माना जाता है, और अन्य प्रकरणों में केवल इनपुट और आउटपुट (लेकिन इनपुट/आउटपुट नहीं) समर्थित होते हैं। व्यतिक्रम अवस्था भाषाओं के मध्य भिन्न होते है: फोरट्रान में 90 इनपुट/आउटपुट व्यतिक्रम है, जबकि C# और SQL विस्तार में इनपुट व्यतिक्रम है, और TScript में प्रत्येक पैरामीटर को इनपुट या आउटपुट के रूप में स्पष्ट रूप से निर्दिष्ट किया गया है।


सांकेतिक रूप से, पैरामीटर अवस्था को सामान्यतः क्रिया घोषणा में एक संकेत शब्द के साथ इंगित किया जाता है, जैसे C# में <code>void f(out int x)</code>है। परंपरागत रूप से आउटपुट पैरामीटर को प्रायः पैरामीटर सूची के अंत में स्पष्ट रूप से अलग करने के लिए रखा जाता है, हालांकि इसका हमेशा अनुगमन नहीं किया जाता है। TScript एक अलग दृष्टिकोण का उपयोग करता है, जहां क्रिया घोषणा में इनपुट पैरामीटर सूचीबद्ध होते हैं, फिर आउटपुट पैरामीटर, एक कोलन (:) द्वारा अलग किए जाते हैं और क्रिया में स्वयं कोई प्रतिफल प्रकार नहीं होता है, जैसा कि इस क्रिया में होता है, जो टेक्स्ट खंड के आकार की गणना करता है:
सांकेतिक रूप से, पैरामीटर अवस्था को सामान्यतः प्रकार्य विवरण में एक संकेत शब्द के साथ इंगित किया जाता है, जैसे C# में <code>void f(out int x)</code>किया जाता है। परंपरागत रूप से आउटपुट पैरामीटर को प्रायः पैरामीटर सूची के अंत में स्पष्ट रूप से अलग करने के लिए रखा जाता है, हालांकि इसका हमेशा अनुगमन नहीं किया जाता है। TScript एक अलग दृष्टिकोण का उपयोग करता है, जहां प्रकार्य विवरण में इनपुट पैरामीटर सूचीबद्ध होते हैं, फिर आउटपुट पैरामीटर, एक कोलन (:) द्वारा अलग किए जाते हैं और प्रकार्य में स्वयं कोई प्रतिफल प्रकार नहीं होता है, जैसा कि इस प्रकार्य में होता है, जो टेक्स्ट खंड के आकार की गणना करता है:
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
TextExtent(WString text, Font font : Integer width, Integer height)
TextExtent(WString text, Font font : Integer width, Integer height)
</syntaxhighlight>
</syntaxhighlight>
पैरामीटर अवस्था [[सांकेतिक शब्दार्थ|वस्त्वर्थक अर्थविज्ञान]] का एक रूप है, जो प्रोग्रामर के उद्देश्य को बताता है और अनुभाषक को त्रुटियों को पकड़ने और इष्टतमीकरण उपयोजित करने की अनुमति देता है - वे अनिवार्य रूप से परिचालन अर्थविज्ञान (कैसे पैरामीटर अस्थायी वास्तव में होता है) को उपयोजित नहीं करते हैं। विशेष रूप से, हालांकि इनपुट पैरामीटर को मान आह्वान द्वारा उपयोजित किया जा सकता है, और आउटपुट और इनपुट/आउटपुट पैरामीटर को संदर्भ आह्वान द्वारा उपयोजित किया जा सकता है - और यह बिना अंतर्निर्मित समर्थन के इन प्रकार के भाषाओं में करने का एक सीधा प्रकार है - यह हमेशा ऐसा नहीं होता है कि उन्हें कैसे उपयोजित किया जाता है। इस भेद पर Ada '83 औचित्य में विस्तार से चर्चा की गई है, जो इस बात पर जोर देता है कि पैरामीटर अवस्था संक्षिप्त है जिससे पैरामीटर पारक क्रियाविधि (संदर्भ द्वारा या प्रतिलिपि द्वारा) वास्तव में कार्यान्वित किया जाता है।<ref name=ada/> उदाहरण के लिए, जबकि C# में इनपुट पैरामीटर (व्यतिक्रम, कोई संकेत शब्द नहीं) मान द्वारा पारित किए जाते हैं, और आउटपुट और इनपुट/आउटपुट पैरामीटर (<code>out</code> और <code>ref</code>) संदर्भ द्वारा पास किए जाते हैं, पीएल/एसक्यूएल इनपुट पैरामीटर (<code>IN</code>) में संदर्भ द्वारा पारित किए जाते हैं, और आउटपुट और इनपुट/आउटपुट पैरामीटर (<code>OUT</code> और <code>IN OUT</code>) व्यतिक्रम रूप से मान द्वारा पारित किए जाते हैं और परिणाम वापस अनुकरण किया जाता है, लेकिन <code>NOCOPY</code> संकलक संकेत का उपयोग करके संदर्भ द्वारा पारित किया जा सकता है।<ref>[http://docs.oracle.com/cd/B10500_01/appdev.920/a96624/08_subs.htm#12813 8. PL/SQL Subprograms: Passing Large Data Structures with the NOCOPY Compiler Hint]</ref>
पैरामीटर अवस्था [[सांकेतिक शब्दार्थ|वस्त्वर्थक अर्थविज्ञान]] का एक रूप है, जो क्रमादेशक के उद्देश्य को बताता है और अनुभाषक को त्रुटियों को पकड़ने और इष्टतमीकरण उपयोजित करने की अनुमति देता है - वे अनिवार्य रूप से परिचालन अर्थविज्ञान (कैसे पैरामीटर अस्थायी वास्तव में होता है) को उपयोजित नहीं करते हैं। विशेष रूप से, हालांकि इनपुट पैरामीटर को मान आह्वान द्वारा उपयोजित किया जा सकता है, और आउटपुट और इनपुट/आउटपुट पैरामीटर को संदर्भ आह्वान द्वारा उपयोजित किया जा सकता है - और यह बिना अंतर्निर्मित समर्थन के इन प्रकार के भाषाओं में करने का एक सीधा प्रकार है - यह हमेशा ऐसा नहीं होता है कि उन्हें कैसे उपयोजित किया जाता है। इस भेद पर Ada '83 औचित्य में विस्तार से बातचित की गई है, जो इस बात पर महत्त्व देता है कि पैरामीटर अवस्था संक्षिप्त है जिससे पैरामीटर पारक प्रकार्यविधि (संदर्भ द्वारा या प्रतिलिपि द्वारा) वास्तव में कार्यान्वित किया जाता है।<ref name=ada/> उदाहरण के लिए, जबकि C# में इनपुट पैरामीटर (व्यतिक्रम, कोई संकेत शब्द नहीं) मान द्वारा पारित किए जाते हैं, और आउटपुट और इनपुट/आउटपुट पैरामीटर (<code>out</code> और <code>ref</code>) संदर्भ द्वारा पारित किए जाते हैं, पीएल/एसक्यूएल इनपुट पैरामीटर (<code>IN</code>) में संदर्भ द्वारा पारित किए जाते हैं, और आउटपुट और इनपुट/आउटपुट पैरामीटर (<code>OUT</code> और <code>IN OUT</code>) व्यतिक्रम रूप से मान द्वारा पारित किए जाते हैं और परिणाम वापस अनुकरण किया जाता है, लेकिन<code>NOCOPY</code>संकलक संकेत का उपयोग करके संदर्भ द्वारा पारित किया जा सकता है।<ref>[http://docs.oracle.com/cd/B10500_01/appdev.920/a96624/08_subs.htm#12813 8. PL/SQL Subprograms: Passing Large Data Structures with the NOCOPY Compiler Hint]</ref>


आउटपुट पैरामीटर के लिए एक वाक्य रचनात्मक रूप से समान निर्माण क्रिया के समान नाम वाले चर के लिए वापसी मान निर्दिष्ट करना है। यह [[पास्कल (प्रोग्रामिंग भाषा)|पास्कल (क्रमादेशन भाषा)]] और [[फोरट्रान 66]] और [[फोरट्रान 77]] में पाया जाता है, जैसा कि इस पास्कल उदाहरण में है:
आउटपुट पैरामीटर के लिए एक वाक्य रचनात्मक रूप से समान निर्माण प्रकार्य के समान नाम वाले चर के लिए प्रतिफल मान निर्दिष्ट करता है। यह [[पास्कल (प्रोग्रामिंग भाषा)|पारित्कल (क्रमादेशन भाषा)]] और [[फोरट्रान 66]] और [[फोरट्रान 77]] में पाया जाता है, जैसा कि इस पारित्कल उदाहरण में है:
<syntaxhighlight lang="pascal">
<syntaxhighlight lang="pascal">
function f(x, y: integer): integer;
function f(x, y: integer): integer;
Line 185: Line 185:
end;
end;
</syntaxhighlight>
</syntaxhighlight>
यह अर्थ की दृष्टि से भिन्न है कि जब कॉल किया जाता है, तो क्रिया का मूल्यांकन किया जाता है - यह आउटपुट को भंडार करने के लिए आह्वान [[स्कोप (कंप्यूटर साइंस)|क्षेत्र (कंप्यूटर साइंस)]] से एक चर पारित नहीं किया जाता है।
यह अर्थ की दृष्टि से भिन्न है कि जब कॉल किया जाता है, तो प्रकार्य का मूल्यांकन किया जाता है - यह आउटपुट को भंडार करने के लिए आह्वान [[स्कोप (कंप्यूटर साइंस)|क्षेत्र (कंप्यूटर साइंस)]] से एक चर पारित नहीं किया गया है।


=== प्रयोग ===
=== प्रयोग ===
आउटपुट पैरामीटर का प्राथमिक उपयोग क्रिया से एकाधिक मान वापस करना है, जबकि इनपुट/आउटपुट पैरामीटर का उपयोग पैरामीटर पारक (सहभाजित वातावरण के बदले, वैश्विक चर के रूप में) का उपयोग करके स्थिति को संशोधित करना है। एकाधिक मानों को वापस करने का एक महत्वपूर्ण उपयोग एक मान और एक त्रुटि स्थिति दोनों को वापस करने की [[अर्धसूत्रीविभाजन समस्या|अर्धसूत्रीय समस्या]] समाधान करना है - अर्ध विधेय समस्या: बहुमूल्यवान प्रतिफल देखें।
आउटपुट पैरामीटर का प्राथमिक उपयोग प्रकार्य से एकाधिक मान वापस करना है, जबकि इनपुट/आउटपुट पैरामीटर का उपयोग पैरामीटर पारक (सहभाजित वातावरण के बदले, वैश्विक चर के रूप में) का उपयोग करके स्थिति को संशोधित करना है। एकाधिक मानों को वापस करने का एक महत्वपूर्ण उपयोग एक मान और एक त्रुटि स्थिति दोनों को वापस करने की [[अर्धसूत्रीविभाजन समस्या|अर्धसूत्रीय समस्या]] समाधान करना है - अर्ध विधेय समस्या: बहुमूल्यवान प्रतिफल देखें।


उदाहरण के लिए, C में किसी क्रिया से दो चर वापस करने के लिए, कोई लिख सकता है:
उदाहरण के लिए, C में किसी प्रकार्य से दो चर वापस करने के लिए, कोई लिख सकता है:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
int width
int width
Line 199: Line 199:
जहाँ<code>x</code> एक इनपुट पैरामीटर है और <code>width</code> और <code>height</code> आउटपुट पैरामीटर हैं।
जहाँ<code>x</code> एक इनपुट पैरामीटर है और <code>width</code> और <code>height</code> आउटपुट पैरामीटर हैं।


C और संबंधित भाषाओं में एक सामान्य उपयोग प्रकरण अपवाद से निपटने के लिए है, जहां एक क्रिया प्रतिफल मान को आउटपुट चर में रखता है, और क्रिया सफल हुआ या नहीं, इसके अनुरूप एक बूलियन देता है। एक आदर्श उदाहरण .NET में <code>TryParse</code> विधि है, विशेष रूप से C#, जो एक पूर्णांक में स्ट्रिंग को एक पदव्याख्या करता है, सफलता पर <code>true</code> और विफलता पर <code>false</code>होता है। इसमें निम्नलिखित हस्ताक्षर हैं:<ref>[http://msdn.microsoft.com/en-us/library/f02979c7.aspx Int32.TryParse Method (String, Int32)]</ref>
C और संबंधित भाषाओं में एक सामान्य उपयोग प्रकरण अपवाद से निपटने के लिए है, जहां एक प्रकार्य प्रतिफल मान को आउटपुट चर में रखता है, और प्रकार्य सफल हुआ या नहीं, इसके अनुरूप एक बूलियन देता है। एक आदर्श उदाहरण .NET में <code>TryParse</code> विधि है, विशेष रूप से C#, जो एक पूर्णांक में स्ट्रिंग को एक पदव्याख्या करता है, सफलता पर <code>true</code> और विफलता पर <code>false</code>होता है। इसमें निम्नलिखित हस्ताक्षर हैं:<ref>[http://msdn.microsoft.com/en-us/library/f02979c7.aspx Int32.TryParse Method (String, Int32)]</ref>
<syntaxhighlight lang="csharp">
<syntaxhighlight lang="csharp">
public static bool TryParse(string s, out int result)
public static bool TryParse(string s, out int result)
Line 210: Line 210:
}
}
</syntaxhighlight>
</syntaxhighlight>
इसी तरह के विचार कई संभावित प्रकारों में से एक के मूल्य को वापस करने के लिए उपयोजित होते हैं, जहां वापसी मूल्य प्रकार निर्दिष्ट कर सकता है और फिर कई आउटपुट चरों में से एक में मूल्य संग्रहीत किया जाता है।
इसी तरह के विचार कई संभावित प्रकारों में से एक के मूल्य को वापस करने के लिए उपयोजित होते हैं, जहां वापसी मूल्य प्रकार निर्दिष्ट कर सकता है और फिर कई आउटपुट चर में से एक में मूल्य संग्रहीत किया जाता है।


=== कमियां ===
=== कमियां ===
आधुनिक क्रमादेशन में आउटपुट मापदंडों को प्रायः हतोत्साहित किया जाता है, अनिवार्य रूप से अनुपयुक्त, भ्रामक और बहुत निम्न-स्तर के रूप में - सामान्य प्रतिफल मान समझने और काम करने में अत्याधिक आसान होते हैं।<ref name=CA1021>[http://msdn.microsoft.com/en-us/library/ms182131.aspx CA1021: Avoid out parameters]</ref> विशेष रूप से, आउटपुट पैरामीटर में दुष्प्रभाव (आउटपुट पैरामीटर को संशोधित करना) के साथ कार्य सम्मिलित होते हैं और शब्दार्थ संदर्भ के समान होते हैं, जो शुद्ध प्रकार्य और मूल्यों की तुलना में अधिक भ्रमित होते हैं, और आउटपुट पैरामीटर और इनपुट/आउटपुट पैरामीटर के मध्य अंतर सूक्ष्म हो सकते है। इसके अलावा, क्योंकि सामान्य क्रमादेशन शैलियों में अधिकांश पैरामीटर केवल इनपुट पैरामीटर हैं, आउटपुट पैरामीटर और इनपुट/आउटपुट पैरामीटर असामान्य हैं और इसलिए भ्रम के लिए अतिसंवेदनशील हैं।
आधुनिक क्रमादेशन में आउटपुट पैरामीटर को प्रायः हतोत्साहित किया जाता है, अनिवार्य रूप से अनुपयुक्त, भ्रामक और बहुत निम्न-स्तर के रूप में - सामान्य प्रतिफल मान समझने और काम करने में अत्याधिक आसान होते हैं।<ref name=CA1021>[http://msdn.microsoft.com/en-us/library/ms182131.aspx CA1021: Avoid out parameters]</ref> विशेष रूप से, आउटपुट पैरामीटर में अनुषंगी प्रभाव (आउटपुट पैरामीटर को संशोधित करना) के साथ कार्य सम्मिलित होते हैं और शब्दार्थ संदर्भ के समान होते हैं, जो शुद्ध प्रकार्य और मूल्यों की तुलना में अधिक भ्रमित होते हैं, और आउटपुट पैरामीटर और इनपुट/आउटपुट पैरामीटर के मध्य अंतर सूक्ष्म हो सकते है। इसके अलावा, क्योंकि सामान्य क्रमादेशन शैलियों में अधिकांश पैरामीटर केवल इनपुट पैरामीटर हैं, आउटपुट पैरामीटर और इनपुट/आउटपुट पैरामीटर असामान्य हैं और इसलिए भ्रम के लिए अतिसंवेदनशील हैं।


आउटपुट और इनपुट/आउटपुट पैरामीटर क्रिया संरचना (कंप्यूटर विज्ञान) को रोकते हैं, क्योंकि आउटपुट अभिव्यक्ति के मूल्य के बदले चर में संग्रहीत होते है। इस प्रकार किसी को प्रारंभ में एक चर घोषित करना चाहिए, और फिर प्रकार्य की श्रृंखला के प्रत्येक चरण को एक अलग कथन होना चाहिए। उदाहरण के लिए, C ++ में निम्न क्रिया संरचना:
आउटपुट और इनपुट/आउटपुट पैरामीटर प्रकार्य संरचना (कंप्यूटर विज्ञान) को रोकते हैं, क्योंकि आउटपुट अभिव्यक्ति के मूल्य के बदले चर में संग्रहीत होते है। इस प्रकार किसी को प्रारंभ में एक चर अभिप्रेत करना चाहिए, और फिर प्रकार्य की श्रृंखला के प्रत्येक पद को एक अलग कथन में होना चाहिए। उदाहरण के लिए, C ++ में निम्न प्रकार्य संरचना:
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
Object obj = G(y, F(x));
Object obj = G(y, F(x));
</syntaxhighlight>
</syntaxhighlight>
जब आउटपुट और इनपुट/आउटपुट पैरामीटर के साथ लिखा जाता है (<code>F</code> के लिए यह एक आउटपुट पैरामीटर है, <code>G</code> एक इनपुट/आउटपुट पैरामीटर के लिए):
जब आउटपुट और इनपुट/आउटपुट पैरामीटर के साथ लिखा जाता है (<code>F</code>के लिए यह एक आउटपुट पैरामीटर है, <code>G</code>एक इनपुट/आउटपुट पैरामीटर के लिए):
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
Object obj;
Object obj;
Line 225: Line 225:
G(y, &obj);
G(y, &obj);
</syntaxhighlight>
</syntaxhighlight>
एकल आउटपुट या इनपुट/आउटपुट पैरामीटर वाले क्रिया के विशेष प्रकरण में और कोई वापसी मान नहीं, क्रिया संयोजन संभव है यदि आउटपुट या इनपुट/आउटपुट पैरामीटर (या C/C++ में, इसका पता) भी क्रिया द्वारा लौटाया जाता है, जिस स्थिति में उपरोक्त बन जाता है:
एकल आउटपुट या इनपुट/आउटपुट पैरामीटर वाले प्रकार्य के विशेष प्रकरण में और कोई वापसी मान नहीं है, प्रकार्य संयोजन संभव है यदि आउटपुट या इनपुट/आउटपुट पैरामीटर (या C/C++ में, इसका पता) भी प्रकार्य द्वारा लौटाया जाता है, जिस स्थिति में उपरोक्त बन जाता है:
<syntaxhighlight lang="cpp">
<syntaxhighlight lang="cpp">
Object obj;
Object obj;
Line 234: Line 234:
आउटपुट पैरामीटर के उपयोग के प्रकरणों के लिए कई विकल्प हैं।
आउटपुट पैरामीटर के उपयोग के प्रकरणों के लिए कई विकल्प हैं।


किसी क्रिया से एकाधिक मान वापस करने के लिए, एक विकल्प [[टपल]] वापस करना है। यदि Go या पायथन में स्वचालित अनुक्रम विकुलन और [[समानांतर असाइनमेंट|समानांतर नियुक्त]] का उपयोग किया जा सकता है, तो यह वाक्यात्मक रूप से स्पष्ट है:
किसी प्रकार्य से एकाधिक मान वापस करने के लिए, एक विकल्प [[टपल]] वापस करना है। यदि Go या पायथन में स्वचालित अनुक्रम विकुलन और [[समानांतर असाइनमेंट|समानांतर नियुक्त]] का उपयोग किया जा सकता है, तो यह वाक्यात्मक रूप से स्पष्ट है:
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
def f():
def f():
Line 240: Line 240:
a, b = f()
a, b = f()
</syntaxhighlight>
</syntaxhighlight>
कई प्रकारों में से किसी एक का मान लौटाने के लिए, इसके बदले टैग किए गए संघ का उपयोग किया जा सकता है; सबसे सामान्य प्रकरण [[अशक्त प्रकार]] ([[विकल्प प्रकार]]) हैं, जहां वापसी मूल्य विफलता को इंगित करने के लिए शून्य हो सकता है। अपवाद से प्रबंधन के लिए, कोई अशक्त प्रकार वापस कर सकता है, या एक अपवाद बढ़ा सकता है। उदाहरण के लिए, पायथन में या तो हो सकता है:
कई प्रकारों में से किसी एक का मान लौटाने के लिए, इसके बदले चिन्हित किए गए संघ का उपयोग किया जा सकता है; सबसे सामान्य प्रकरण [[अशक्त प्रकार]] ([[विकल्प प्रकार]]) हैं, जहां वापसी मूल्य विफलता को इंगित करने के लिए शून्य हो सकता है। अपवाद से प्रबंधन के लिए, कोई अशक्त प्रकार वापस कर सकता है, या एक अपवाद बढ़ा सकता है। उदाहरण के लिए, पायथन में किसी के पास हो सकता है:
<syntaxhighlight lang="python">
<syntaxhighlight lang="python">
result = parse(s)
result = parse(s)
Line 259: Line 259:
WidthHeight width_and_height = F(x);
WidthHeight width_and_height = F(x);
</syntaxhighlight>
</syntaxhighlight>
वस्तु अभिमुखित भाषाओं में, इनपुट/आउटपुट पैरामीटर का उपयोग करने के बदले, एक व्यक्ति प्रायः सहभाजन करके कॉल का उपयोग कर सकता है, किसी वस्तु के संदर्भ को पास कर सकता है और फिर वस्तु को बदलना, हालांकि यह नहीं बदल रहा है कि चर किस वस्तु को संदर्भित करता है।<ref name=CA1021 />
वस्तु अभिमुखित भाषाओं में, इनपुट/आउटपुट पैरामीटर का उपयोग करने के बदले, एक व्यक्ति प्रायः सहभाजन करके कॉल का उपयोग कर सकता है, किसी वस्तु के संदर्भ को पारित कर सकता है और फिर वस्तु को बदलना, हालांकि यह नहीं बदल रहा है कि चर किस वस्तु को संदर्भित करता है।<ref name=CA1021 />
== यह भी देखें ==
== यह भी देखें ==
* [[कमांड-लाइन तर्क]]
* [[कमांड-लाइन तर्क]]

Revision as of 17:31, 23 May 2023

कंप्यूटर क्रमादेशन में, एक पैरामीटर या एक औपचारिक तर्क एक विशेष प्रकार का चर है जिसका उपयोग सबरूटीन में इनपुट के रूप में प्रदान किए गए डेटा के भाँग में से एक को संदर्भित करने के लिए किया जाता है।[lower-alpha 1][1] डेटा के ये भाँग तर्कों के मान हैं[2][3][4] (जिन्हें प्रायः वास्तविक तर्क या वास्तविक पैरामीटर कहा जाता है) जिसके साथ सबरूटीन को संबोधित/आह्वान किया जाता है। पैरामीटर की एक आदेशित सूची सामान्यतः एक सबरूटीन की परिभाषा में सम्मिलित होती है, इसलिए प्रत्येक बार सबरूटीन को कॉल किया जाता है, उस कॉल के लिए इसके तर्कों का मूल्यांकन किया जाता है, और परिणामी मान संबंधित पैरामीटर को नियुक्त किया जा सकता है।

सामान्य गणितीय उपयोग में तर्क के विपरीत, कंप्यूटर विज्ञान में तर्क एक वास्तविक इनपुट अभिव्यक्ति है जो किसी प्रकार्य, प्रकार्य या रूटीन को आह्वान/आह्वान कथन में पारित/आपूर्ति करती है, जबकि पैरामीटर सबरूटीन के कार्यान्वयन के अंदर चर है। उदाहरण के लिए, यदि कोईadd सबरूटीन को def add(x, y): return x + yके रूप में परिभाषित करता है, तो x, y पैरामीटर हैं, जबकि अगर इसेadd(2, 3)कहा जाता है तब 2, 3 तर्क हैं। ध्यान दें कि आह्वान संदर्भ से चर (और उसके भाव) तर्क हो सकते हैं: यदि सबरूटीन को a = 2 कहा जाता है; b = 3; add(a, b)तो चर a, b तर्क हैं, मूल्य 2, 3 नहीं है। अधिक जानकारी के लिए पैरामीटर और तर्क अनुभाग देखें।

पैरामीटर को कैसे अभिप्रेत किया जा सकता है और सबरूटीन के पैरामीटर के लिए (मूल्य) तर्कों को कैसे पारित किया जाता है, इसके शब्दार्थ को भाषा की मूल्यांकन रणनीति द्वारा परिभाषित किया जाता है, और किसी विशेष कंप्यूटर प्रणाली में इसका प्रतिनिधित्व कैसे किया जाता है, इसका विवरण उस प्रणाली के आह्वान सम्मेलन पर निर्भर करता है। सबसे सामान्य प्रकरण में, मूल्य से कॉल करें, एक पैरामीटर सबरूटीन के अंतर्गत एक नए स्थानीय चर के रूप में कार्य करता है जो तर्क के मान के लिए आरंभिक होता है (यदि तर्क एक चर है तो तर्क की एक स्थानीय (पृथक) प्रति), लेकिन अन्य प्रकरण में, उदाहरण के लिए संदर्भ द्वारा कॉल, कॉल करने वाले द्वारा प्रदान किया गया तर्क चर सबरूटीन कहे जाने वाले कार्यों से प्रभावित हो सकता है।

उदाहरण

C क्रमादेशन भाषा में निम्नलिखित क्रमादेश एक प्रकार्य को परिभाषित करता है जिसे "सेल्सटैक्स" नाम दिया गया है और इसमें "मूल्य" नाम का एक पैरामीटर है। मूल्य का प्रकार "दोगुना" (अर्थात एक द्विगुण परिशुद्धता चल बिंदु संख्या) है। प्रकार्य का प्रतिफल प्रकार भी दोगुना है।

double SalesTax(double price)
{
  return 0.05 * price;
}

प्रकार्य परिभाषित होने के बाद, इसे निम्नानुसार उपयोजित किया जा सकता है:

SalesTax(10.00);

इस उदाहरण में, प्रकार्य को तर्क 10.00 के साथ उपयोजित किया गया है। जब ऐसा होता है, तो 10.00 मूल्य निर्धारित किया जाता है, और प्रकार्य इसके परिणाम की गणना करना प्रारंभ कर देता है। परिणाम प्रस्तुत करने के पद नीचे दिए गए हैं, {} में संलग्न हैं। 0.05 * price इंगित करता है कि सबसे पहले मूल्य के मूल्य से 0.05 को गुणा करना है, जो 0.50 returnदेता है जिसका अर्थ है कि प्रकार्य 0.05 * priceके परिणाम का उत्पादन करता है। इसलिए, अंतिम परिणाम (द्विआधारी अंशों के रूप में दशमलव अंशों का प्रतिनिधित्व करने के साथ सामना करने वाली संभावित निकटन त्रुटियों को उपेक्षित करना) 0.50 है।

पैरामीटर और तर्क

विभिन्न क्रमादेशन भाषाओं में पैरामीटर और तर्क के अलग-अलग अर्थ हो सकते हैं। कभी-कभी उनका उपयोग परस्पर विनिमय के लिए किया जाता है, और अर्थ को अलग करने के लिए संदर्भ का उपयोग किया जाता है। पैरामीटर शब्द (कभी-कभी औपचारिक पैरामीटर कहा जाता है) का उपयोग प्रायः प्रकार्य परिभाषा में पाए जाने वाले चर को संदर्भित करने के लिए किया जाता है, जबकि तर्क (कभी-कभी वास्तविक पैरामीटर कहा जाता है) प्रकार्य कॉल पर प्रदान किए गए वास्तविक इनपुट को संदर्भित करता है। उदाहरण के लिए, यदि कोई प्रकार्य कोdef f(x): ... के रूप में परिभाषित करता है, तब x पैरामीटर है, और यदि इसेa = ...;f(a)कहा जाता है तोa तर्क है। पैरामीटर एक (अपरिबद्ध) चर है, जबकि तर्क शाब्दिक (कंप्यूटर क्रमादेशन) या चर या अधिक जटिल अभिव्यक्ति हो सकता है जिसमें शाब्दिक और चर सम्मिलित हैं। मान आह्वान के प्रकरण में, प्रकार्य को जो पारित किया जाता है वह तर्क का मान है - उदाहरण के लिए, f(2) और a = 2; f(a) समतुल्य कॉल हैं - संदर्भ द्वारा कॉल करते समय, तर्क के रूप में एक चर के साथ, जो पारित किया जाता है वह उस चर का एक संदर्भ है - यद्यपि प्रकार्य कॉल के लिए वाक्य विन्यास समान रह सकता है।[5] प्रकार्य घोषित और/या परिभाषा में उत्तीर्ण-द्वारा-संदर्भ या उत्तीर्ण-द्वारा-मूल्य के लिए विनिर्देश बनाए जाते है।

प्रकार्य परिभाषाओं में पैरामीटर दिखाई देता हैं; प्रकार्य कॉल में तर्क प्रकट होते हैं। प्रकार्य परिभाषा में f(x) = x*x चर x एक पैरामीटर है; प्रकार्य कॉल में f(2) मान 2 प्रकार्य का तर्क है। संक्षेप में, एक पैरामीटर एक प्रकार है, और एक तर्क उदाहरण है।

एक पैरामीटर प्रकार्य का एक आंतरिक गुण है, इसकी परिभाषा में सम्मिलित है। उदाहरण के लिए, कई भाषाओं में, दो प्रदान किए गए पूर्णांकों को एक साथ जोड़ने और योग की गणना करने के प्रकार्य में प्रत्येक पूर्णांक के लिए एक, दो पैरामीटर की आवश्यकता होती है। सामान्य रूप में, एक प्रकार्य को कई पैरामीटर के साथ परिभाषित किया जा सकता है, या कोई भी पैरामीटर के साथ परिभाषित नहीं किया जा सकता है। यदि किसी प्रकार्य में पैरामीटर हैं, तो उसकी परिभाषा का वह भाग जो पैरामीटर निर्दिष्ट करता है, उसकी पैरामीटर सूची कहलाता है।

इसके विपरीत, [6] तर्क उस प्रकार्य को प्रदान किए गए भाव हैं जब इसे कहा जाता है, सामान्यतः एक अभिव्यक्ति जो किसी एक पैरामीटर से अनुकूल है। पैरामीटर के विपरीत, जो प्रकार्य की परिभाषा का एक अपरिवर्तनीय भाग है, तर्क कॉल से कॉल में भिन्न हो सकता हैं। प्रत्येक बार एक प्रकार्य को कॉल किया जाता है, प्रकार्य कॉल का भाग जो तर्कों को निर्दिष्ट करता है उसे तर्क सूची कहा जाता है।

यद्यपि पैरामीटर को सामान्यतः तर्कों के रूप में संदर्भित किया जाता है, तर्कों को कभी-कभी वास्तविक मान या पैरामीटर चर के संदर्भ के रूप में माना जाता है जब सबरूटीन को कार्यावधि पर संबोधित किया जाता है। सबरूटीन में कॉल करने वाले कोड पर बातचित करते समय, सबरूटीन में पारित कोई भी मान या संदर्भ तर्क होते हैं, और कोड में वह स्थान जहां ये मान या संदर्भ दिए गए हैं, वह पैरामीटर सूची है। सबरूटीन परिभाषा के अंतर्गत कोड पर बातचित करते समय, सबरूटीन की पैरामीटर सूची में चर पैरामीटर हैं, जबकि कार्यावधि पर पैरामीटर के मान तर्क हैं। उदाहरण के लिए, C में, क्रम से वितरण के समय शून्य * प्रकार के तर्क में पारित होना सामान्य बात है और इसे अपेक्षित प्रकार में विक्षेप किया जाता है:

void ThreadFunction(void* pThreadArgument)
{
  // Naming the first parameter 'pThreadArgument' is correct, rather than
  // 'pThreadParameter'. At run time the value we use is an argument. As
  // mentioned above, reserve the term parameter for when discussing
  // subroutine definitions.
}

अंतर को अधिक समझने के लिए, C में लिखे गए निम्नलिखित प्रकार्य पर विचार करें:

int Sum(int addend1, int addend2)
{
  return addend1 + addend2;
}

प्रकार्य योग के दो पैरामीटर हैं, जिनका नाम addend1 और addend2 है। यह पैरामीटर में दिए गए मान जोड़ता है, और सबरूटीन के कॉलर को परिणाम देता है (C अनुभाषक द्वारा स्वचालित रूप से आपूर्ति की गई तकनीक का उपयोग करके)।

सम प्रकार्य को कॉल करने वाला कोड इस तरह दिखाई दे सकता है:

int value1 = 40;
int value2 = 2;
int sum_value = Sum(value1, value2);

चर value1 और value2 मानों के साथ प्रारंभ किए गए हैं। इस संदर्भ में, value1 और value2, दोनों योग प्रकार्य के लिए तर्क हैं।

कार्यावधि पर, इन परिवर्त्य को नियुक्त किए गए मान प्रकार्य योग को तर्कों के रूप में पारित किया जाता है। योग प्रकार्य में, पैरामीटर addend1 और addend2 का मूल्यांकन किया जाता है, जिससे क्रमशः तर्क 40 और 2 प्राप्त किया जाता है। तर्कों के मान जोड़े जाते हैं, और परिणाम कॉलर को वापस कर दिया जाता है, जहां इसे चर योग मूल्य को नियुक्त किया जाता है।

पैरामीटर और तर्कों के मध्य अंतर के कारण, किसी प्रकार्य को अनुचित तर्क देना संभव है। कॉल बहुत अधिक या बहुत कम तर्क प्रदान कर सकता है; एक या अधिक तर्क गलत प्रकार के हो सकते हैं; या तर्क गलत क्रम में दिए जा सकते हैं। इनमें से कोई भी स्थिति पैरामीटर और तर्क सूचियों के मध्य अवतरण का कारण बनती है, और प्रकार्य प्रायः अनपेक्षित उत्तर देता है या कार्यावधि त्रुटि उत्पन्न करता है।

एफिल में वैकल्पिक सम्मेलन

एफिल सॉफ्टवेयर विकास पद्धति और भाषा के अंतर्गत, संबंध के तर्क और पैरामीटर के अलग-अलग उपयोग सम्मेलन द्वारा स्थापित किए गए हैं। शब्द तर्क विशेष रूप से नियमित इनपुट के संदर्भ में प्रयोग किए जाते है,[7] और अवधि पैरामीटर का उपयोग विशेष रूप से सामान्य वर्गों के लिए प्रकार पैरामीटरकरण में किया जाता है।[8]

निम्नलिखित नियमित परिभाषा पर विचार करें:

    sum (addend1: INTEGER; addend2: INTEGER): INTEGER
        do
            Result := addend1 + addend2
        end

रूटीन sum में दो तर्क होते हैंaddend1 और addend2, जिन्हें रूटीन का औपचारिक तर्क कहा जाता है। कॉल से sum वास्तविक तर्कों को निर्दिष्ट करता है, जैसा किvalue1 और value2के साथ नीचे दिखाया गया है।

    sum_value: INTEGER
    value1: INTEGER = 40
    value2: INTEGER = 2
                
            sum_value := sum (value1, value2)

पैरामीटर को या तो औपचारिक या वास्तविक माना जाता है। सामान्य वर्ग की परिभाषा में औपचारिक सामान्य पैरामीटर का उपयोग किया जाता है। नीचे दिए गए उदाहरण में, class HASH_TABLE एक सामान्य वर्ग के रूप में अभिप्रेत किया गया है जिसमें दो औपचारिक सामान्य पैरामीटर हैं, G प्रभावित डेटा का प्रतिनिधित्व करता है औरK डेटा के लिए हैश कुंजी का प्रतिनिधित्व करता है:

class HASH_TABLE [G, K -> HASHABLE] 
            

जब एक वर्ग HASH_TABLE काग्राहक बन जाता है, तो सामान्य व्युत्पत्ति में औपचारिक सामान्य पैरामीटर को वास्तविक सामान्य पैरामीटर के साथ प्रतिस्थापित किया जाता है। निम्नलिखित विशेषता विवरण में, my_dictionary एक वर्ण स्ट्रिंग आधारित शब्दकोश के रूप में उपयोग किया जाता है। इस प्रकार, डेटा और प्रमुख औपचारिक सामान्य पैरामीटर दोनों को STRING प्रकार के वास्तविक सामान्य पैरामीटर के साथ प्रतिस्थापित किया जाता है।

    my_dictionary: HASH_TABLE [STRING, STRING]

डेटा प्रकार

दृढ़ता से टाइप की गई क्रमादेशन भाषाओं में, प्रत्येक पैरामीटर के डेटाटाइप को प्रकार्य विवरण में निर्दिष्ट किया जाना चाहिए। प्रकार अनुमान का उपयोग करने वाली भाषाएं प्रकार्य के तत्व और उपयोग से स्वचालित रूप से प्रकारों को खोजने का प्रयास करती हैं। गतिकीय रूप से टाइप की गई क्रमादेशन भाषा कार्यावधि तक प्ररूप विश्लेषण को अलग करती हैं। अशक्त रूप से टाइप की गई भाषाएँ शुद्धता के लिए क्रमादेशक पर निर्भर होने के बदले, बिना किसी प्रकार के संकल्प के बहुत कम प्रदर्शन करती हैं।

कुछ भाषाएँ यह इंगित करने के लिए एक विशेष संकेत शब्द (जैसे शून्य) का उपयोग करती हैं कि सबरूटीन का कोई पैरामीटर नहीं है; औपचारिक प्रकार के सिद्धांत में, ऐसे कार्य एक रिक्त पैरामीटर सूची लेते हैं (जिसका प्रकार शून्य नहीं है, अथवा इकाई है)।

प्राचर पारण

पैरामीटर को तर्क देने के लिए यथार्थ प्रकार्य, जिसे तर्क पारित करना कहा जाता है, उस पैरामीटर के लिए उपयोग की जाने वाली मूल्यांकन रणनीति पर निर्भर करता है (सामान्यतः मूल्य द्वारा कॉल किया जाता है), जिसे संकेत शब्द का उपयोग करके निर्दिष्ट किया जा सकता है।

व्यतिक्रम तर्क

कुछ क्रमादेशन भाषा जैसे Ada (क्रमादेशन भाषा), C++, क्लोजर,[citation needed] सामान्य लिस्प,[9] फोरट्रान 90,[10] पायथन (क्रमादेशन भाषा), रूबी (क्रमादेशन भाषा) , Tcl (क्रमादेशन भाषा), और विंडोज पॉवरशेल[citation needed] सबरूटीन की विवरण में स्पष्ट या निहित रूप से दिए जाने वाले व्यतिक्रम तर्क की अनुमति देते हैं। यह कॉल करने वाले को सबरूटीन कॉल करते समय उस तर्क को छोड़ने की अनुमति देते है। यदि व्यतिक्रम तर्क स्पष्ट रूप से दिया गया है, तो कॉलर द्वारा प्रदान नहीं किए जाने पर उस मान का उपयोग किया जाता है। यदि व्यतिक्रम तर्क निहित है (कभी-कभी वैकल्पिक जैसे संकेत शब्द का उपयोग करके) तो कॉलर द्वारा कोई मान प्रदान नहीं किए जाने पर भाषा एक प्रसिद्ध मान (जैसे शून्य सूचक, रिक्त, शून्य, एक रिक्त स्ट्रिंग, आदि) प्रदान करती है।

पॉवरशेल उदाहरण:

function doc($g = 1.21) {
    "$g gigawatts? $g gigawatts? Great Scott!"
}
PS  > doc
1.21 gigawatts? 1.21 gigawatts? Great Scott!

PS  > doc 88
88 gigawatts? 88 gigawatts? Great Scott!

व्यतिक्रम तर्कों को चर-लंबाई तर्क सूची के विशेष प्रकरण के रूप में देखा जा सकता है।

चर-लंबाई पैरामीटर सूची

कुछ भाषाएँ तर्कों की चर संख्या को स्वीकार करने के लिए सबरूटीन को परिभाषित करने की अनुमति देती हैं। ऐसी भाषाओं के लिए, सबरूटीन को तर्कों की सूची के माध्यम से पुनरावृति करना चाहिए।

पॉवरशेल उदाहरण:

function marty {
    $args | foreach { "back to the year $_" }
}
PS  > marty 1985
back to the year 1985

PS  > marty 2015 1985 1955
back to the year 2015
back to the year 1985
back to the year 1955

नामित पैरामीटर

कुछ क्रमादेशन भाषा- जैसे एडा (क्रमादेशन भाषा) और विंडोज पॉवरशेल- सबरूटीन्स को नामित पैरामीटर रखने की अनुमति देते हैं। यह आह्वान कोड को अधिक स्व-दस्तावेजीकरण करने की अनुमति देते है। यह कॉल करने वाले को अधिक नम्यता भी प्रदान करते है, प्रायः तर्कों के क्रम को बदलने की अनुमति देते है, या आवश्यकतानुसार तर्कों को छोड़ देते है।

पॉवरशेल उदाहरण:

function jennifer($adjectiveYoung, $adjectiveOld) {
    "Young Jennifer: I'm $adjectiveYoung!"
    "Old Jennifer: I'm $adjectiveOld!"
}
PS  > jennifer 'fresh' 'experienced'
Young Jennifer: I'm fresh!
Old Jennifer: I'm experienced!

PS  > jennifer -adjectiveOld 'experienced' -adjectiveYoung 'fresh'
Young Jennifer: I'm fresh!
Old Jennifer: I'm experienced!

कार्यात्मक भाषाओं में एकाधिक पैरामीटर

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

आउटपुट पैरामीटर

आउटपुट पैरामीटर, जिसे आउट पैरामीटर या प्रतिफल पैरामीटर के रूप में भी जाना जाता है, इनपुट के अधिक सामान्य उपयोग के बदले आउटपुट के लिए उपयोग किया जाने वाला पैरामीटर है। संदर्भ पैरामीटर द्वारा कॉल का उपयोग करना, या मूल्य पैरामीटर द्वारा कॉल करना जहां मूल्य एक संदर्भ है, क्योंकि आउटपुट पैरामीटर कुछ भाषाओं में एक मुहावरा है, विशेष रूप से C और C++,[lower-alpha 2] जबकि अन्य भाषाओं में आउटपुट पैरामीटर के लिए अंतर्निहित समर्थन है। आउटपुट पैरामीटर के लिए अंतर्निहित समर्थन वाली भाषाओं में एडा [11] (क्रमादेशन भाषा देखें), फोरट्रान (फोरट्रान 90 के बाद से; फोरट्रान "उद्देश्य" देखें)), SQL के लिए विभिन्न प्रकार्यत्मक विस्तार, जैसे PL/SQL (PL/SQL प्रकार्य देखें)[12] और Transact-SQL, C Sharp [13] और .NET संरचना,[14] स्विफ्ट (क्रमादेशन भाषा),[15] और लिपिन्यास भाषा टीस्क्रिप्ट (टीस्क्रिप्ट प्रकार्य विवरण) सम्मलित है।

अधिक निश्चित रूप से, कोई तीन प्रकार के पैरामीटर या पैरामीटर विधि में अंतर कर सकते है: इनपुट पैरामीटर, आउटपुट पैरामीटर, और इनपुट/आउटपुट पैरामीटर; इन्हें प्रायः in, out, और in out या inoutके रूप में दर्शाया जाता है। एक इनपुट तर्क (इनपुट पैरामीटर के लिए तर्क) एक मान होना चाहिए, जैसे प्रारंभिक चर या शाब्दिक, और इसे फिर से परिभाषित या नियुक्त नहीं किया जाना चाहिए; एक आउटपुट तर्क एक नियुक्त करने योग्य चर होना चाहिए, लेकिन इसे प्रारंभ करने की आवश्यकता नहीं है, कोई स्थित मान पहुंच योग्य नहीं है, और इसे एक मान निर्दिष्ट किया जाना चाहिए; और एक इनपुट/आउटपुट तर्क एक प्रारंभिक, नियुक्त करने योग्य चर होना चाहिए, और वैकल्पिक रूप से एक मान नियुक्त किया जा सकता है। भाषाओं के मध्य यथार्थ आवश्यकताएं और प्रवर्तन अलग-अलग होते हैं - उदाहरण के लिए, Ada 83 में आउटपुट पैरामीटर केवल नियतन के बाद भी नियुक्त किए, पढ़े नहीं जा सकते हैं (इसे Ada 95 में एक सहायक संचायक चर की आवश्यकता को हटाने के लिए हटा दिया गया था)। ये एक r-मूल्य (एक मूल्य है), एक l-मूल्य (नियुक्त किया जा सकता है), या एक r-मूल्य/l-मूल्य (एक मूल्य है) के अभिव्यक्ति में मूल्य (कंप्यूटर विज्ञान) की धारणा के अनुरूप हैं), क्रमशः, हालांकि इन शब्दों का C में विशेष अर्थ है।

कुछ प्रकरणों में केवल इनपुट और इनपुट/आउटपुट को अलग किया जाता है, आउटपुट को इनपुट/आउटपुट का एक विशिष्ट उपयोग माना जाता है, और अन्य प्रकरणों में केवल इनपुट और आउटपुट (लेकिन इनपुट/आउटपुट नहीं) समर्थित होते हैं। व्यतिक्रम अवस्था भाषाओं के मध्य भिन्न होते है: फोरट्रान में 90 इनपुट/आउटपुट व्यतिक्रम है, जबकि C# और SQL विस्तार में इनपुट व्यतिक्रम है, और TScript में प्रत्येक पैरामीटर को इनपुट या आउटपुट के रूप में स्पष्ट रूप से निर्दिष्ट किया गया है।

सांकेतिक रूप से, पैरामीटर अवस्था को सामान्यतः प्रकार्य विवरण में एक संकेत शब्द के साथ इंगित किया जाता है, जैसे C# में void f(out int x)किया जाता है। परंपरागत रूप से आउटपुट पैरामीटर को प्रायः पैरामीटर सूची के अंत में स्पष्ट रूप से अलग करने के लिए रखा जाता है, हालांकि इसका हमेशा अनुगमन नहीं किया जाता है। TScript एक अलग दृष्टिकोण का उपयोग करता है, जहां प्रकार्य विवरण में इनपुट पैरामीटर सूचीबद्ध होते हैं, फिर आउटपुट पैरामीटर, एक कोलन (:) द्वारा अलग किए जाते हैं और प्रकार्य में स्वयं कोई प्रतिफल प्रकार नहीं होता है, जैसा कि इस प्रकार्य में होता है, जो टेक्स्ट खंड के आकार की गणना करता है:

TextExtent(WString text, Font font : Integer width, Integer height)

पैरामीटर अवस्था वस्त्वर्थक अर्थविज्ञान का एक रूप है, जो क्रमादेशक के उद्देश्य को बताता है और अनुभाषक को त्रुटियों को पकड़ने और इष्टतमीकरण उपयोजित करने की अनुमति देता है - वे अनिवार्य रूप से परिचालन अर्थविज्ञान (कैसे पैरामीटर अस्थायी वास्तव में होता है) को उपयोजित नहीं करते हैं। विशेष रूप से, हालांकि इनपुट पैरामीटर को मान आह्वान द्वारा उपयोजित किया जा सकता है, और आउटपुट और इनपुट/आउटपुट पैरामीटर को संदर्भ आह्वान द्वारा उपयोजित किया जा सकता है - और यह बिना अंतर्निर्मित समर्थन के इन प्रकार के भाषाओं में करने का एक सीधा प्रकार है - यह हमेशा ऐसा नहीं होता है कि उन्हें कैसे उपयोजित किया जाता है। इस भेद पर Ada '83 औचित्य में विस्तार से बातचित की गई है, जो इस बात पर महत्त्व देता है कि पैरामीटर अवस्था संक्षिप्त है जिससे पैरामीटर पारक प्रकार्यविधि (संदर्भ द्वारा या प्रतिलिपि द्वारा) वास्तव में कार्यान्वित किया जाता है।[11] उदाहरण के लिए, जबकि C# में इनपुट पैरामीटर (व्यतिक्रम, कोई संकेत शब्द नहीं) मान द्वारा पारित किए जाते हैं, और आउटपुट और इनपुट/आउटपुट पैरामीटर (out और ref) संदर्भ द्वारा पारित किए जाते हैं, पीएल/एसक्यूएल इनपुट पैरामीटर (IN) में संदर्भ द्वारा पारित किए जाते हैं, और आउटपुट और इनपुट/आउटपुट पैरामीटर (OUT और IN OUT) व्यतिक्रम रूप से मान द्वारा पारित किए जाते हैं और परिणाम वापस अनुकरण किया जाता है, लेकिनNOCOPYसंकलक संकेत का उपयोग करके संदर्भ द्वारा पारित किया जा सकता है।[16]

आउटपुट पैरामीटर के लिए एक वाक्य रचनात्मक रूप से समान निर्माण प्रकार्य के समान नाम वाले चर के लिए प्रतिफल मान निर्दिष्ट करता है। यह पारित्कल (क्रमादेशन भाषा) और फोरट्रान 66 और फोरट्रान 77 में पाया जाता है, जैसा कि इस पारित्कल उदाहरण में है:

function f(x, y: integer): integer;
begin
    f := x + y;
end;

यह अर्थ की दृष्टि से भिन्न है कि जब कॉल किया जाता है, तो प्रकार्य का मूल्यांकन किया जाता है - यह आउटपुट को भंडार करने के लिए आह्वान क्षेत्र (कंप्यूटर साइंस) से एक चर पारित नहीं किया गया है।

प्रयोग

आउटपुट पैरामीटर का प्राथमिक उपयोग प्रकार्य से एकाधिक मान वापस करना है, जबकि इनपुट/आउटपुट पैरामीटर का उपयोग पैरामीटर पारक (सहभाजित वातावरण के बदले, वैश्विक चर के रूप में) का उपयोग करके स्थिति को संशोधित करना है। एकाधिक मानों को वापस करने का एक महत्वपूर्ण उपयोग एक मान और एक त्रुटि स्थिति दोनों को वापस करने की अर्धसूत्रीय समस्या समाधान करना है - अर्ध विधेय समस्या: बहुमूल्यवान प्रतिफल देखें।

उदाहरण के लिए, C में किसी प्रकार्य से दो चर वापस करने के लिए, कोई लिख सकता है:

int width
int height;

F(x, &width, &height);

जहाँx एक इनपुट पैरामीटर है और width और height आउटपुट पैरामीटर हैं।

C और संबंधित भाषाओं में एक सामान्य उपयोग प्रकरण अपवाद से निपटने के लिए है, जहां एक प्रकार्य प्रतिफल मान को आउटपुट चर में रखता है, और प्रकार्य सफल हुआ या नहीं, इसके अनुरूप एक बूलियन देता है। एक आदर्श उदाहरण .NET में TryParse विधि है, विशेष रूप से C#, जो एक पूर्णांक में स्ट्रिंग को एक पदव्याख्या करता है, सफलता पर true और विफलता पर falseहोता है। इसमें निम्नलिखित हस्ताक्षर हैं:[17]

public static bool TryParse(string s, out int result)

और इस तरह प्रयुक्त किया जा सकता है:

int result;
if (!Int32.TryParse(s, result)) {
    // exception handling
}

इसी तरह के विचार कई संभावित प्रकारों में से एक के मूल्य को वापस करने के लिए उपयोजित होते हैं, जहां वापसी मूल्य प्रकार निर्दिष्ट कर सकता है और फिर कई आउटपुट चर में से एक में मूल्य संग्रहीत किया जाता है।

कमियां

आधुनिक क्रमादेशन में आउटपुट पैरामीटर को प्रायः हतोत्साहित किया जाता है, अनिवार्य रूप से अनुपयुक्त, भ्रामक और बहुत निम्न-स्तर के रूप में - सामान्य प्रतिफल मान समझने और काम करने में अत्याधिक आसान होते हैं।[18] विशेष रूप से, आउटपुट पैरामीटर में अनुषंगी प्रभाव (आउटपुट पैरामीटर को संशोधित करना) के साथ कार्य सम्मिलित होते हैं और शब्दार्थ संदर्भ के समान होते हैं, जो शुद्ध प्रकार्य और मूल्यों की तुलना में अधिक भ्रमित होते हैं, और आउटपुट पैरामीटर और इनपुट/आउटपुट पैरामीटर के मध्य अंतर सूक्ष्म हो सकते है। इसके अलावा, क्योंकि सामान्य क्रमादेशन शैलियों में अधिकांश पैरामीटर केवल इनपुट पैरामीटर हैं, आउटपुट पैरामीटर और इनपुट/आउटपुट पैरामीटर असामान्य हैं और इसलिए भ्रम के लिए अतिसंवेदनशील हैं।

आउटपुट और इनपुट/आउटपुट पैरामीटर प्रकार्य संरचना (कंप्यूटर विज्ञान) को रोकते हैं, क्योंकि आउटपुट अभिव्यक्ति के मूल्य के बदले चर में संग्रहीत होते है। इस प्रकार किसी को प्रारंभ में एक चर अभिप्रेत करना चाहिए, और फिर प्रकार्य की श्रृंखला के प्रत्येक पद को एक अलग कथन में होना चाहिए। उदाहरण के लिए, C ++ में निम्न प्रकार्य संरचना:

Object obj = G(y, F(x));

जब आउटपुट और इनपुट/आउटपुट पैरामीटर के साथ लिखा जाता है (Fके लिए यह एक आउटपुट पैरामीटर है, Gएक इनपुट/आउटपुट पैरामीटर के लिए):

Object obj;
F(x, &obj);
G(y, &obj);

एकल आउटपुट या इनपुट/आउटपुट पैरामीटर वाले प्रकार्य के विशेष प्रकरण में और कोई वापसी मान नहीं है, प्रकार्य संयोजन संभव है यदि आउटपुट या इनपुट/आउटपुट पैरामीटर (या C/C++ में, इसका पता) भी प्रकार्य द्वारा लौटाया जाता है, जिस स्थिति में उपरोक्त बन जाता है:

Object obj;
G(y, F(x, &obj));

विकल्प

आउटपुट पैरामीटर के उपयोग के प्रकरणों के लिए कई विकल्प हैं।

किसी प्रकार्य से एकाधिक मान वापस करने के लिए, एक विकल्प टपल वापस करना है। यदि Go या पायथन में स्वचालित अनुक्रम विकुलन और समानांतर नियुक्त का उपयोग किया जा सकता है, तो यह वाक्यात्मक रूप से स्पष्ट है:

def f():
    return 1, 2
a, b = f()

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

result = parse(s)
if result is None:
    # exception handling

या, अधिक मुहावरेदार भाषा में:

try:
    result = parse(s)
except ParseError:
    # exception handling

स्थानीय चर की आवश्यकता नहीं होने और आउटपुट चर का उपयोग करते समय प्रतिफल की प्रतिलिपि बनाने के माइक्रो-इष्टतमीकरण को पारंपरिक प्रकार्य पर भी उपयोजित किया जा सकता है और पर्याप्त रूप से परिष्कृत अनुभाषकों द्वारा मूल्यों को लौटाया जा सकता है।

C और संबंधित भाषाओं में आउटपुट पैरामीटर का सामान्य विकल्प सभी प्रतिफल मूल्य वाले एकल डेटा संरचना को वापस करना है।[13]उदाहरण के लिए, चौड़ाई और ऊंचाई को प्रावरण वाली संरचना दी गई है, कोई लिख सकता है:

WidthHeight width_and_height = F(x);

वस्तु अभिमुखित भाषाओं में, इनपुट/आउटपुट पैरामीटर का उपयोग करने के बदले, एक व्यक्ति प्रायः सहभाजन करके कॉल का उपयोग कर सकता है, किसी वस्तु के संदर्भ को पारित कर सकता है और फिर वस्तु को बदलना, हालांकि यह नहीं बदल रहा है कि चर किस वस्तु को संदर्भित करता है।[18]

यह भी देखें

टिप्पणियाँ

  1. In this article, the term "subroutine" refers to any subroutine-like construct, which have different names and slightly different meanings depending on the programming language being discussed.
  2. C and C++ are call by value, but if type is a reference (a C/C++ pointer or C++ reference), then setting the value of the reference can be used to produce call by reference style behavior.

संदर्भ

  1. "Passing Information to a Method or a Constructor (The Java™ Tutorials > Learning the Java Language > Classes and Objects)". Oracle.com. Retrieved 2021-09-09. Parameters refers to the list of variables in a method declaration. Arguments are the actual values that are passed in when the method is invoked. When you invoke a method, the arguments used must match the declaration's parameters in type and order.
  2. Prata, Stephen (2004). सी प्राइम अधिक (5th ed.). Sams. pp. 276–277. ISBN 978-0-672-32696-7.
  3. "वर्किंग ड्राफ्ट, प्रोग्रामिंग लैंग्वेज C++ के लिए मानक" (PDF). www.open-std.org. Archived from the original (PDF) on December 14, 2005. Retrieved 1 January 2018.
  4. Gordon, Aaron. "उपप्रोग्राम और पैरामीटर पासिंग". rowdysites.msudenver.edu/~gordona. Archived from the original on 1 January 2018. Retrieved 1 January 2018.
  5. Dollard, Kathleen. "मूल्य और संदर्भ द्वारा तर्क पास करना (विजुअल बेसिक)". docs.microsoft.com (in English). Retrieved 2018-10-27.
  6. "जीएनयू सी प्रोग्रामिंग ट्यूटोरियल". crasseux.com (in English). Retrieved 2018-10-27.
  7. Meyer, Bertrand. Object-Oriented Software Construction, 2nd Edition, Prentice Hall, 1997, p 444.
  8. Meyer, p. 96.
  9. "कार्य". gigamonkeys.com. Retrieved 2021-06-02.
  10. "वैकल्पिक तर्क". www.netlib.org. Retrieved 2021-06-02.
  11. 11.0 11.1 8.2 Parameter Modes, "Rationale for the Design of the Ada® Programming Language"
  12. 8. PL/SQL Subprograms: Specifying Subprogram Parameter Modes
  13. 13.0 13.1 Peter Hallam. "Why does C# have both 'ref' and 'out'?". Archived from the original on 2011-09-26.
  14. ParameterDirection Enumeration
  15. Functions — The Swift Programming Language (Swift 4.2)
  16. 8. PL/SQL Subprograms: Passing Large Data Structures with the NOCOPY Compiler Hint
  17. Int32.TryParse Method (String, Int32)
  18. 18.0 18.1 CA1021: Avoid out parameters