नामित पैरामीटर: Difference between revisions

From Vigyanwiki
(Created page with "{{more citations needed|date=August 2014}} कंप्यूटर प्रोग्रामिंग में, नामित पैरामीटर, नामि...")
 
No edit summary
 
(12 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{more citations needed|date=August 2014}}
[[कंप्यूटर प्रोग्रामिंग]] में, नामित पैरामीटर, नामित-पैरामीटर तर्क, नामित लॉजिक या कीवर्ड लॉजिक फलन कॉल के लिए प्रत्येक लॉजिक को फलन कॉल के अन्दर दिए गए [[पैरामीटर (कंप्यूटर विज्ञान)|पैरामीटर]] के साथ स्पष्ट रूप से जोड़ने के लिए कंप्यूटर भाषा के समर्थन को संदर्भित करते हैं।
 
[[कंप्यूटर प्रोग्रामिंग]] में, नामित पैरामीटर, नामित-पैरामीटर तर्क, नामित तर्क या कीवर्ड तर्क फ़ंक्शन कॉल के लिए प्रत्येक पैरामीटर_(कंप्यूटर_प्रोग्रामिंग) को फ़ंक्शन कॉल के भीतर दिए गए पैरामीटर [[पैरामीटर (कंप्यूटर विज्ञान)]] के साथ स्पष्ट रूप से जोड़ने के लिए कंप्यूटर भाषा के समर्थन को संदर्भित करते हैं।


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


उदाहरण के लिए, इस [[जावा (प्रोग्रामिंग भाषा)]] या सी शार्प (प्रोग्रामिंग भाषा)|सी# विधि कॉल पर विचार करें जो नामित पैरामीटर का उपयोग नहीं करता है:
उदाहरण के लिए, इस [[जावा (प्रोग्रामिंग भाषा)]] या C# विधि कॉल पर विचार करें, जो नामित पैरामीटर का उपयोग नहीं करता है:


<syntaxhighlight lang="java">
<syntaxhighlight lang="java">
Line 20: Line 18:
                     drawingNow=True)
                     drawingNow=True)
</syntaxhighlight>
</syntaxhighlight>
[[PHP]] में नामित पैरामीटर का उपयोग करके, कॉल को इस प्रकार लिखा जा सकता है:
[[PHP|पीएचपी]] में नामित पैरामीटर का उपयोग करके, कॉल को इस प्रकार लिखा जा सकता है:
<syntaxhighlight lang="php">
<syntaxhighlight lang="php">
$window->addNewControl(title: "Title",
$window->addNewControl(title: "Title",
Line 29: Line 27:
                       drawingNow: True);
                       drawingNow: True);
</syntaxhighlight>
</syntaxhighlight>
स्थितीय तर्क वाला संस्करण अधिक अंतर्निहित है। पैरामीटर नाम देने वाले संस्करण अधिक स्पष्ट हैं। परिस्थिति के आधार पर, एक प्रोग्रामर को इनमें से एक या दूसरे को पढ़ना आसान लग सकता है।
स्थितीय लॉजिक वाला संस्करण अधिक अंतर्निहित है। पैरामीटर नाम देने वाले संस्करण अधिक स्पष्ट हैं। परिस्थिति के आधार पर, प्रोग्रामर को इनमें से एक या दूसरे को पढ़ना आसान लग सकता है।


== प्रोग्रामिंग भाषाओं में उपयोग ==
== प्रोग्रामिंग भाषाओं में उपयोग ==
नामित पैरामीटर कई भाषाओं में स्पष्ट रूप से समर्थित हैं। उदाहरणों के एक गैर-विस्तृत चयन में [[एडा (प्रोग्रामिंग भाषा)]],<ref>{{cite book|author=|year=1983|title=एडीए प्रोग्रामिंग भाषा के लिए संदर्भ मैनुअल|publisher=United States Department of Defense|isbn=}}</ref> सी शार्प 4.0|सी# 4.0+,<ref>{{Cite web|last=BillWagner|title=नामित और वैकल्पिक तर्क - सी# प्रोग्रामिंग गाइड|url=https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments|access-date=2021-06-16|website=docs.microsoft.com|language=en-us}}</ref> [[सीलोन (प्रोग्रामिंग भाषा)]]{{Citation needed|date=July 2021}}, [[कोल्डफ्यूजन मार्कअप लैंग्वेज]] (सीएफएमएल){{Citation needed|date=July 2021}}, [[ सामान्य लिस्प ]],<ref>{{Cite web|title=कार्य|url=https://lispcookbook.github.io/cl-cookbook/functions.html|access-date=2021-10-28|website=lispcookbook.github.io}}</ref> [[फोरट्रान]]{{Citation needed|date=July 2021}}, [[आईडीएल (प्रोग्रामिंग भाषा)]]{{Citation needed|date=July 2021}}, [[कोटलिन (प्रोग्रामिंग भाषा)]],<ref>{{Cite web|title=Functions {{!}} Kotlin|url=https://www.jetbrains.com/idea/functions.html|access-date=2021-06-16|website=Kotlin Help|language=en-US}}</ref> [[मेथेमेटिका]]{{Citation needed|date=July 2021}}, पीएल/एसक्यूएल{{Citation needed|date=July 2021}}, [[पावरशेल]]{{Citation needed|date=July 2021}}, पायथन (प्रोग्रामिंग भाषा),<ref>{{Cite web|title=8. Compound statements|url=https://docs.python.org/3/reference/compound_stmts.html#function-definitions|access-date=2021-10-28|website=docs.python.org}}</ref> [[आर (प्रोग्रामिंग भाषा)]],<ref>{{Cite web|title=10.3 Named arguments and defaults|url=https://cran.r-project.org/doc/manuals/r-release/R-intro.html#Named-arguments-and-defaults|access-date=2021-10-28|website=An Introduction to R}}</ref> पीएचपी,<ref>{{Cite web|title=PHP: Function arguments - Manual|url=https://www.php.net/manual/en/functions.arguments.php#functions.named-arguments|access-date=2021-06-16|website=www.php.net}}</ref> [[रूबी (प्रोग्रामिंग भाषा)]],<ref>{{Cite web|title=Ruby 2 Keyword Arguments|url=https://thoughtbot.com/blog/ruby-2-keyword-arguments|access-date=2021-10-28|website=thoughtbot.com|date=21 July 2014}}</ref> [[स्काला (प्रोग्रामिंग भाषा)]],<ref>{{Cite web|title=नामित तर्क|url=https://docs.scala-lang.org/tour/named-arguments.html|access-date=2021-06-16|website=Scala Documentation}}</ref> [[गपशप]]{{Citation needed|date=July 2021}}, [[स्विफ्ट (प्रोग्रामिंग भाषा)]]<ref>{{Cite web|url=https://docs.swift.org/swift-book/LanguageGuide/Functions.html#ID166|title=Functions — The Swift Programming Language (Swift 5.1)|website=docs.swift.org|access-date=2020-01-27}}</ref> और [[मूल दृश्य]]<ref>{{Cite web|last=KathleenDollard|title=स्थिति और नाम के आधार पर तर्क पारित करना - विज़ुअल बेसिक|url=https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/passing-arguments-by-position-and-by-name|access-date=2021-06-16|website=docs.microsoft.com|language=en-us}}</ref> ध्यान दें कि [[ उद्देश्य सी ]] में नामित पैरामीटर नहीं हैं (भले ही विधि नाम के कुछ हिस्से नामित पैरामीटर की तरह दिख सकते हैं)<ref>''[https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html#//apple_ref/doc/uid/TP40011210-CH3-SW5|iOS Developer Library - The Implementation of a Class Provides Its Internal Behavior]''</ref>
नामित पैरामीटर कई भाषाओं में स्पष्ट रूप से समर्थित हैं। उदाहरणों के गैर-विस्तृत चयन में [[एडा (प्रोग्रामिंग भाषा)]]<ref>{{cite book|author=|year=1983|title=एडीए प्रोग्रामिंग भाषा के लिए संदर्भ मैनुअल|publisher=United States Department of Defense|isbn=}}</ref> C# 4.0+,<ref>{{Cite web|last=BillWagner|title=नामित और वैकल्पिक तर्क - सी# प्रोग्रामिंग गाइड|url=https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/named-and-optional-arguments|access-date=2021-06-16|website=docs.microsoft.com|language=en-us}}</ref> [[सीलोन (प्रोग्रामिंग भाषा)]], [[कोल्डफ्यूजन मार्कअप लैंग्वेज]] (सीएफएमएल), [[ सामान्य लिस्प |सामान्य लिस्प]] ,<ref>{{Cite web|title=कार्य|url=https://lispcookbook.github.io/cl-cookbook/functions.html|access-date=2021-10-28|website=lispcookbook.github.io}}</ref> [[फोरट्रान]], [[आईडीएल (प्रोग्रामिंग भाषा)]], [[कोटलिन (प्रोग्रामिंग भाषा)]],<ref>{{Cite web|title=Functions {{!}} Kotlin|url=https://www.jetbrains.com/idea/functions.html|access-date=2021-06-16|website=Kotlin Help|language=en-US}}</ref> [[मेथेमेटिका]], पीएल/एसक्यूएल, [[पावरशेल]], पायथन (प्रोग्रामिंग भाषा)<ref>{{Cite web|title=8. Compound statements|url=https://docs.python.org/3/reference/compound_stmts.html#function-definitions|access-date=2021-10-28|website=docs.python.org}}</ref> [[आर (प्रोग्रामिंग भाषा)]]<ref>{{Cite web|title=10.3 Named arguments and defaults|url=https://cran.r-project.org/doc/manuals/r-release/R-intro.html#Named-arguments-and-defaults|access-date=2021-10-28|website=An Introduction to R}}</ref> पीएचपी,<ref>{{Cite web|title=PHP: Function arguments - Manual|url=https://www.php.net/manual/en/functions.arguments.php#functions.named-arguments|access-date=2021-06-16|website=www.php.net}}</ref> [[रूबी (प्रोग्रामिंग भाषा)]]<ref>{{Cite web|title=Ruby 2 Keyword Arguments|url=https://thoughtbot.com/blog/ruby-2-keyword-arguments|access-date=2021-10-28|website=thoughtbot.com|date=21 July 2014}}</ref> [[स्काला (प्रोग्रामिंग भाषा)]]<ref>{{Cite web|title=नामित तर्क|url=https://docs.scala-lang.org/tour/named-arguments.html|access-date=2021-06-16|website=Scala Documentation}}</ref> [[गपशप]], [[स्विफ्ट (प्रोग्रामिंग भाषा)]]<ref>{{Cite web|url=https://docs.swift.org/swift-book/LanguageGuide/Functions.html#ID166|title=Functions — The Swift Programming Language (Swift 5.1)|website=docs.swift.org|access-date=2020-01-27}}</ref> और [[मूल दृश्य|मूल दृश्य है।]]<ref>{{Cite web|last=KathleenDollard|title=स्थिति और नाम के आधार पर तर्क पारित करना - विज़ुअल बेसिक|url=https://docs.microsoft.com/en-us/dotnet/visual-basic/programming-guide/language-features/procedures/passing-arguments-by-position-and-by-name|access-date=2021-06-16|website=docs.microsoft.com|language=en-us}}</ref> ध्यान दें कि [[ उद्देश्य सी |ऑब्जेक्टिव-c]] में नामित पैरामीटर नहीं हैं। (तथापि विधि नाम के कुछ भागों में नामित पैरामीटर की तरह दिख सकते हैं।)<ref>''[https://developer.apple.com/library/ios/documentation/cocoa/conceptual/ProgrammingWithObjectiveC/DefiningClasses/DefiningClasses.html#//apple_ref/doc/uid/TP40011210-CH3-SW5|iOS Developer Library - The Implementation of a Class Provides Its Internal Behavior]''</ref>
 


== पैरामीटर का क्रम ==
उन भाषाओं में जो नामित पैरामीटर का समर्थन नहीं करते हैं, फलन कॉल में लॉजिकों का क्रम आवश्यक रूप से तय किया जाता है, क्योंकि यह एकमात्र विधि है, जिससे भाषा यह पहचान सकती है। कि कौन सा लॉजिक किस पैरामीटर के लिए उपयोग किया जाना है।


== मापदंडों का क्रम ==
नामित पैरामीटर के साथ, सामान्यतः किसी भी क्रम में लॉजिक प्रदान करना संभव होता है, क्योंकि प्रत्येक लॉजिक से जुड़ा पैरामीटर नाम उसके उद्देश्य की पहचान करता है। इससे कार्यक्रम के भागों के बीच सामंजस्य कम हो जाता है। कुछ भाषाएँ नामित पैरामीटर का समर्थन करती हैं, लेकिन फिर भी लॉजिकों को विशिष्ट क्रम में प्रदान करने की आवश्यकता होती है।
उन भाषाओं में जो नामित मापदंडों का समर्थन नहीं करते हैं, फ़ंक्शन कॉल में तर्कों का क्रम आवश्यक रूप से तय किया जाता है, क्योंकि यह एकमात्र तरीका है जिससे भाषा यह पहचान सकती है कि कौन सा तर्क किस पैरामीटर के लिए उपयोग किया जाना है।


नामित पैरामीटर के साथ, आमतौर पर किसी भी क्रम में तर्क प्रदान करना संभव होता है, क्योंकि प्रत्येक तर्क से जुड़ा पैरामीटर नाम उसके उद्देश्य की पहचान करता है। इससे कार्यक्रम के भागों के बीच सामंजस्य कम हो जाता है। कुछ भाषाएँ नामित मापदंडों का समर्थन करती हैं लेकिन फिर भी तर्कों को एक विशिष्ट क्रम में प्रदान करने की आवश्यकता होती है।
== वैकल्पिक पैरामीटर और स्थितीय पैरामीटर==
{{Main article|डिफ़ॉल्ट तर्क}}


== वैकल्पिक पैरामीटर और स्थितीय पैरामीटर{{anchor|Optional_parameters}}==
नामित पैरामीटर अधिकांशतः वैकल्पिक पैरामीटर के साथ संयोजन में उपयोग किए जाते हैं। नामित पैरामीटर के बिना, वैकल्पिक पैरामीटर केवल पैरामीटर सूची के अंत में दिखाई दे सकते हैं, क्योंकि यह निर्धारित करने की कोई अन्य विधि नहीं है कि कौन से मान छोड़े गए हैं। चूँकि, नामित वैकल्पिक पैरामीटर का समर्थन करने वाली भाषाओं में, प्रोग्राम उपलब्ध पैरामीटर के किसी भी उपसमूह की आपूर्ति कर सकते हैं, और नामों का उपयोग यह निर्धारित करने के लिए किया जाता है कि कौन से मान प्रदान किए गए हैं।
{{Main article|Default argument}}
नामित पैरामीटर अक्सर वैकल्पिक पैरामीटर के साथ संयोजन में उपयोग किए जाते हैं। नामित पैरामीटर के बिना, वैकल्पिक पैरामीटर केवल पैरामीटर सूची के अंत में दिखाई दे सकते हैं, क्योंकि यह निर्धारित करने का कोई अन्य तरीका नहीं है कि कौन से मान छोड़े गए हैं। हालाँकि, नामित वैकल्पिक मापदंडों का समर्थन करने वाली भाषाओं में, प्रोग्राम उपलब्ध मापदंडों के किसी भी उपसमूह की आपूर्ति कर सकते हैं, और नामों का उपयोग यह निर्धारित करने के लिए किया जाता है कि कौन से मान प्रदान किए गए हैं।


[[OCaml]] जैसी भाषाओं में एक अतिरिक्त जटिलता उत्पन्न होती है जो वैकल्पिक नामित पैरामीटर और आंशिक एप्लिकेशन दोनों का समर्थन करती है। आंशिक रूप से लागू किए गए फ़ंक्शन और उस फ़ंक्शन के बीच अंतर करना सामान्य रूप से असंभव है जिसमें मापदंडों का एक सबसेट प्रदान किया गया है। OCaml सभी वैकल्पिक नामित-पैरामीटर तर्कों के बाद एक स्थितिगत तर्क की आवश्यकता के द्वारा इस अस्पष्टता को हल करता है: इसकी उपस्थिति या अनुपस्थिति का उपयोग यह तय करने के लिए किया जाता है कि फ़ंक्शन पूरी तरह से या आंशिक रूप से लागू किया गया है या नहीं। यदि सभी पैरामीटर वैकल्पिक हैं, तो कार्यान्वयनकर्ता यूनिट प्रकार का एक डमी पोजिशनल पैरामीटर जोड़कर समस्या का समाधान कर सकता है।
[[OCaml]] जैसी भाषाओं में अतिरिक्त जटिलता उत्पन्न होती है, जो वैकल्पिक नामित पैरामीटर और आंशिक अनुप्रयोग दोनों का समर्थन करती है। आंशिक रूप से प्रयुक्त किए गए फलन और उस फलन के बीच अंतर करना सामान्य रूप से असंभव है, जिसमें पैरामीटर का सबसेट प्रदान किया गया है। OCaml सभी वैकल्पिक नामित-पैरामीटर लॉजिकों के बाद स्थितिगत लॉजिक की आवश्यकता के द्वारा इस अस्पष्टता को हल करता है: इसकी उपस्थिति या अनुपस्थिति का उपयोग यह तय करने के लिए किया जाता है कि फलन पूरी तरह से या आंशिक रूप से प्रयुक्त किया गया है या नहीं। यदि सभी पैरामीटर वैकल्पिक हैं, तो कार्यान्वयनकर्ता इकाई प्रकार का डमी पोजिशनल पैरामीटर जोड़कर समस्या का समाधान कर सकता है।


[[मीडियाविकि]] में, कोड (चर) <code><nowiki>{{{1}}}</nowiki></code>, <code><nowiki>{{{2}}}</nowiki></code> टेम्प्लेट इत्यादि में, पहले, दूसरे, और इसी तरह अनाम पैरामीटर (या नामित पैरामीटर का मान) द्वारा प्रतिस्थापित किया जाएगा <code>1</code>, <code>2</code>, वगैरह।); इन्हें इस नाम से जाना जाता है{{dfn|positional parameter}}एस।
[[मीडियाविकि]] में, कोड (चर) <code><nowiki>{{{1}}}</nowiki></code>, <code><nowiki>{{{2}}}</nowiki></code> टेम्प्लेट इत्यादि में, पहले, दूसरे, और इसी तरह अनाम पैरामीटर (या नामित पैरामीटर का मान) द्वारा <code>1</code>, <code>2</code>, इत्यादि प्रतिस्थापित किया जाएगा।); इन्हें {{dfn|स्थितीय पैरामीटर}} के रूप में जाना जाता है।


== अनुकरण ==
== अनुकरण ==
उन भाषाओं में जो नामित मापदंडों का समर्थन नहीं करते हैं, कुछ समान लाभ अन्य तरीकों से प्राप्त किए जा सकते हैं।
उन भाषाओं में जो नामित पैरामीटर का समर्थन नहीं करते हैं, कुछ समान लाभ अन्य विधियों से प्राप्त किए जा सकते हैं।


=== दस्तावेज़ के साथ ===
=== दस्तावेज़ के साथ ===
दस्तावेज़ीकरण के रूप में उनके मूल्य को जावा (प्रोग्रामिंग भाषा), या टिप्पणियों ([[सी (प्रोग्रामिंग भाषा)]]) जैसी भाषाओं के लिए एकीकृत विकास वातावरण (आईडीई) में टूलटिप्स द्वारा दोहराया जा सकता है:
दस्तावेज़ीकरण के रूप में उनके मान को जावा (प्रोग्रामिंग भाषा), या टिप्पणियों ([[सी (प्रोग्रामिंग भाषा)|C (प्रोग्रामिंग भाषा)]]) जैसी भाषाओं के लिए समन्वित विकास पर्यावरण (आईडीई) में टूलटिप्स द्वारा दोहराया जा सकता है:
<syntaxhighlight lang="c">
<syntaxhighlight lang="c">
MyFunctionCall(
MyFunctionCall(
Line 62: Line 61:
);  
);  
</syntaxhighlight>
</syntaxhighlight>
ऐसी टिप्पणियों की सत्यता के लिए जाँच नहीं की जाती है और तर्कों का क्रम महत्वपूर्ण रहता है।
ऐसी टिप्पणियों की सत्यता के लिए जाँच नहीं की जाती है और लॉजिकों का क्रम महत्वपूर्ण रहता है।


=== डेटा संरचनाओं के साथ ===
=== डेटा संरचनाओं के साथ ===
तर्क आदेश प्रतिबंध को हटाना, और कुछ मानों को अनिर्दिष्ट छोड़ने की क्षमता, एक [[रिकॉर्ड (कंप्यूटर विज्ञान)]] या सहयोगी सरणी को पारित करके प्राप्त की जा सकती है।
लॉजिक आदेश प्रतिबंध को हटाना, और कुछ मानों को अनिर्दिष्ट छोड़ने की क्षमता, [[रिकॉर्ड (कंप्यूटर विज्ञान)]] या सहयोगी ऐरे को पारित करके प्राप्त की जा सकती है।


उदाहरण के लिए, [[जावास्क्रिप्ट]] में, ये दो कॉल समतुल्य हैं:
उदाहरण के लिए, [[जावास्क्रिप्ट]] में, ये दो कॉल समतुल्य हैं:
Line 94: Line 93:
==== विशेष सहयोग ====
==== विशेष सहयोग ====


[[पर्ल]] और प्री-2.0 रूबी (प्रोग्रामिंग भाषा) में एक समान परंपरा मौजूद है (आमतौर पर इसे हैश या विकल्प हैश कहा जाता है)<ref>[https://docstore.mik.ua/orelly/perl/prog3/ch02_09.htm Programming Perl 2.9: Hashes]</ref>), फ़ंक्शन कॉल के भीतर सीमांकक को हटाने के लिए विशेष समर्थन के साथ। उदाहरण के तौर पर, कोर मॉड्यूल का नेट::एफ़टीपी नया फ़ंक्शन वैकल्पिक तर्कों के हैश को स्वीकार करता है।<ref>[http://perldoc.perl.org/Net/FTP.html Perl core module Net::FTP]</ref>
[[पर्ल]] और प्री-2.0 रूबी (प्रोग्रामिंग भाषा) में एक समान परंपरा फलन कॉल के अन्दर सीमांकक को हटाने के लिए विशेष समर्थन के साथ उपलब्ध है। (सामान्यतः इसे हैश या विकल्प हैश कहा जाता है)<ref>[https://docstore.mik.ua/orelly/perl/prog3/ch02_09.htm Programming Perl 2.9: Hashes]</ref> उदाहरण के तौर पर, कोर मॉड्यूल का Net::FTP नया फलन वैकल्पिक लॉजिकों के हैश को स्वीकार करता है।<ref>[http://perldoc.perl.org/Net/FTP.html Perl core module Net::FTP]</ref>




=== जंजीर विधि कॉल के साथ ===
=== [[ विधि शृंखला |शृंखला]] विधि कॉल के साथ ===
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग ]] भाषाओं में, [[धाराप्रवाह इंटरफ़ेस]] के रूप में, नामित मापदंडों को अनुकरण करने के लिए [[ विधि शृंखला ]] का उपयोग करना संभव है। प्रत्येक नामित-पैरामीटर तर्क को तर्क ऑब्जेक्ट पर एक विधि से बदल दिया जाता है जो संशोधित करता है और फिर ऑब्जेक्ट को वापस कर देता है। C++ में, इसे नामित पैरामीटर मुहावरा कहा जाता है।<ref>C++ FAQ, [http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.20 10.20 What is the "Named Parameter Idiom"?]</ref> फिर ऑब्जेक्ट को एक फ़ंक्शन में पास किया जा सकता है जो इसमें मौजूद तर्कों का उपयोग करता है।
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] भाषाओं में, [[धाराप्रवाह इंटरफ़ेस|फ़्लूएंट इंटरफ़ेस]] के रूप में, नामित पैरामीटर को अनुकरण करने के लिए [[ विधि शृंखला |विधि शृंखला]] का उपयोग करना संभव है। प्रत्येक नामित-पैरामीटर लॉजिक को लॉजिक ऑब्जेक्ट पर एक विधि से परिवर्तित कर दिया जाता है, जो संशोधित करता है और फिर ऑब्जेक्ट को वापस कर देता है। C++ में, इसे नामित पैरामीटर मुहावरा कहा जाता है।<ref>C++ FAQ, [http://www.parashift.com/c++-faq-lite/ctors.html#faq-10.20 10.20 What is the "Named Parameter Idiom"?]</ref> फिर ऑब्जेक्ट को फलन में पास किया जा सकता है जो इसमें उपलब्ध लॉजिकों का उपयोग करता है।


बिल्डर वर्ग द्वारा प्रदान किए गए डिफ़ॉल्ट मानों को ओवरराइड करने के तरीके के रूप में मेथड चेनिंग का उपयोग अक्सर [[बिल्डर पैटर्न]] के संयोजन में किया जाता है।
बिल्डर वर्ग द्वारा प्रदान किए गए डिफ़ॉल्ट मानों को ओवरराइड करने की विधि के रूप में मेथड चेनिंग का उपयोग अधिकांशतः [[बिल्डर पैटर्न]] के संयोजन में किया जाता है।


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


* सहायता:टेम्पलेट#हैंडलिंग पैरामीटर|सहायता:नामांकित और स्थितीय मापदंडों के लिए टेम्पलेट।
* सहायता: नामित और स्थितीय पैरामीटर के लिए टेम्पलेट।
* धाराप्रवाह इंटरफ़ेस
* फ़्लूएंट इंटरफ़ेस
* [[टैग (प्रोग्रामिंग)]]
* [[टैग (प्रोग्रामिंग)]]


Line 116: Line 116:
* In C++ this paradigm can be easily implemented: [http://www.boost.org/doc/libs/1_53_0/libs/parameter/doc/html/ Boost Parameter Library]
* In C++ this paradigm can be easily implemented: [http://www.boost.org/doc/libs/1_53_0/libs/parameter/doc/html/ Boost Parameter Library]
* [http://rosettacode.org/wiki/Named_parameters Named Parameters in various programming languages] at [[Rosetta Code]]
* [http://rosettacode.org/wiki/Named_parameters Named Parameters in various programming languages] at [[Rosetta Code]]
[[Category: सबरूटीन्स]] [[Category: उदाहरण सी कोड वाले लेख]] [[Category: उदाहरण जावास्क्रिप्ट कोड वाले लेख]] [[Category: उदाहरण PHP कोड के साथ लेख]] [[Category: उदाहरण के लिए पायथन (प्रोग्रामिंग भाषा) कोड वाले लेख]]


[[Category: Machine Translated Page]]
[[Category:CS1 English-language sources (en)]]
[[Category:Created On 11/07/2023]]
[[Category:Created On 11/07/2023]]
[[Category:Machine Translated Page]]
[[Category:Pages with script errors]]
[[Category:Templates Vigyan Ready]]
[[Category:उदाहरण PHP कोड के साथ लेख]]
[[Category:उदाहरण के लिए पायथन (प्रोग्रामिंग भाषा) कोड वाले लेख]]
[[Category:उदाहरण जावास्क्रिप्ट कोड वाले लेख]]
[[Category:उदाहरण सी कोड वाले लेख]]
[[Category:सबरूटीन्स]]

Latest revision as of 12:47, 28 July 2023

कंप्यूटर प्रोग्रामिंग में, नामित पैरामीटर, नामित-पैरामीटर तर्क, नामित लॉजिक या कीवर्ड लॉजिक फलन कॉल के लिए प्रत्येक लॉजिक को फलन कॉल के अन्दर दिए गए पैरामीटर के साथ स्पष्ट रूप से जोड़ने के लिए कंप्यूटर भाषा के समर्थन को संदर्भित करते हैं।

सिंहावलोकन

नामित पैरामीटर का उपयोग करने वाला फलन कॉल नियमित फलन कॉल से भिन्न होता है, जिसमें लॉजिकों की क्रमबद्ध सूची प्रदान करने के अतिरिक्त, प्रत्येक को पैरामीटर नाम के साथ जोड़कर लॉजिक पारित किए जाते हैं।

उदाहरण के लिए, इस जावा (प्रोग्रामिंग भाषा) या C# विधि कॉल पर विचार करें, जो नामित पैरामीटर का उपयोग नहीं करता है:

window.addNewControl("Title", 20, 50, 100, 50, true);

पायथन (प्रोग्रामिंग भाषा) में नामित पैरामीटर का उपयोग करके, कॉल को इस प्रकार लिखा जा सकता है:

window.addNewControl(title="Title",
                     xPosition=20,
                     yPosition=50,
                     width=100,
                     height=50,
                     drawingNow=True)

पीएचपी में नामित पैरामीटर का उपयोग करके, कॉल को इस प्रकार लिखा जा सकता है:

$window->addNewControl(title: "Title",
                       xPosition: 20,
                       yPosition: 50,
                       width: 100,
                       height: 50,
                       drawingNow: True);

स्थितीय लॉजिक वाला संस्करण अधिक अंतर्निहित है। पैरामीटर नाम देने वाले संस्करण अधिक स्पष्ट हैं। परिस्थिति के आधार पर, प्रोग्रामर को इनमें से एक या दूसरे को पढ़ना आसान लग सकता है।

प्रोग्रामिंग भाषाओं में उपयोग

नामित पैरामीटर कई भाषाओं में स्पष्ट रूप से समर्थित हैं। उदाहरणों के गैर-विस्तृत चयन में एडा (प्रोग्रामिंग भाषा)[1] C# 4.0+,[2] सीलोन (प्रोग्रामिंग भाषा), कोल्डफ्यूजन मार्कअप लैंग्वेज (सीएफएमएल), सामान्य लिस्प ,[3] फोरट्रान, आईडीएल (प्रोग्रामिंग भाषा), कोटलिन (प्रोग्रामिंग भाषा),[4] मेथेमेटिका, पीएल/एसक्यूएल, पावरशेल, पायथन (प्रोग्रामिंग भाषा)[5] आर (प्रोग्रामिंग भाषा)[6] पीएचपी,[7] रूबी (प्रोग्रामिंग भाषा)[8] स्काला (प्रोग्रामिंग भाषा)[9] गपशप, स्विफ्ट (प्रोग्रामिंग भाषा)[10] और मूल दृश्य है।[11] ध्यान दें कि ऑब्जेक्टिव-c में नामित पैरामीटर नहीं हैं। (तथापि विधि नाम के कुछ भागों में नामित पैरामीटर की तरह दिख सकते हैं।)[12]


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

उन भाषाओं में जो नामित पैरामीटर का समर्थन नहीं करते हैं, फलन कॉल में लॉजिकों का क्रम आवश्यक रूप से तय किया जाता है, क्योंकि यह एकमात्र विधि है, जिससे भाषा यह पहचान सकती है। कि कौन सा लॉजिक किस पैरामीटर के लिए उपयोग किया जाना है।

नामित पैरामीटर के साथ, सामान्यतः किसी भी क्रम में लॉजिक प्रदान करना संभव होता है, क्योंकि प्रत्येक लॉजिक से जुड़ा पैरामीटर नाम उसके उद्देश्य की पहचान करता है। इससे कार्यक्रम के भागों के बीच सामंजस्य कम हो जाता है। कुछ भाषाएँ नामित पैरामीटर का समर्थन करती हैं, लेकिन फिर भी लॉजिकों को विशिष्ट क्रम में प्रदान करने की आवश्यकता होती है।

वैकल्पिक पैरामीटर और स्थितीय पैरामीटर

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

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

मीडियाविकि में, कोड (चर) {{{1}}}, {{{2}}} टेम्प्लेट इत्यादि में, पहले, दूसरे, और इसी तरह अनाम पैरामीटर (या नामित पैरामीटर का मान) द्वारा 1, 2, इत्यादि प्रतिस्थापित किया जाएगा।); इन्हें स्थितीय पैरामीटर के रूप में जाना जाता है।

अनुकरण

उन भाषाओं में जो नामित पैरामीटर का समर्थन नहीं करते हैं, कुछ समान लाभ अन्य विधियों से प्राप्त किए जा सकते हैं।

दस्तावेज़ के साथ

दस्तावेज़ीकरण के रूप में उनके मान को जावा (प्रोग्रामिंग भाषा), या टिप्पणियों (C (प्रोग्रामिंग भाषा)) जैसी भाषाओं के लिए समन्वित विकास पर्यावरण (आईडीई) में टूलटिप्स द्वारा दोहराया जा सकता है:

MyFunctionCall(
    20,  /* x coordinate */
    50,  /* y coordinate */
    100, /* width */
    5,   /* height */
    TRUE /* drawing now? */
);

ऐसी टिप्पणियों की सत्यता के लिए जाँच नहीं की जाती है और लॉजिकों का क्रम महत्वपूर्ण रहता है।

डेटा संरचनाओं के साथ

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

उदाहरण के लिए, जावास्क्रिप्ट में, ये दो कॉल समतुल्य हैं:

MyFunctionCall({ xPosition: 20, yPosition: 50, width: 100, height: 5,
                 drawingNow: true });
MyFunctionCall({ width: 100, height: 5, xPosition: 20, yPosition: 50,
                 drawingNow: true });

C99 से तुलना करें:[13]

struct MyParam {
    int xPosition;
    int yPosition;
    int width;
    int height;
    unsigned char drawingNow;
};

MyParam parameters = { .xPosition = 20, .yPosition = 50,
        .width = 100, .height = 5, .drawingNow  = TRUE };
MyFunctionCall(&parameters);


विशेष सहयोग

पर्ल और प्री-2.0 रूबी (प्रोग्रामिंग भाषा) में एक समान परंपरा फलन कॉल के अन्दर सीमांकक को हटाने के लिए विशेष समर्थन के साथ उपलब्ध है। (सामान्यतः इसे हैश या विकल्प हैश कहा जाता है)।[14] उदाहरण के तौर पर, कोर मॉड्यूल का Net::FTP नया फलन वैकल्पिक लॉजिकों के हैश को स्वीकार करता है।[15]


शृंखला विधि कॉल के साथ

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषाओं में, फ़्लूएंट इंटरफ़ेस के रूप में, नामित पैरामीटर को अनुकरण करने के लिए विधि शृंखला का उपयोग करना संभव है। प्रत्येक नामित-पैरामीटर लॉजिक को लॉजिक ऑब्जेक्ट पर एक विधि से परिवर्तित कर दिया जाता है, जो संशोधित करता है और फिर ऑब्जेक्ट को वापस कर देता है। C++ में, इसे नामित पैरामीटर मुहावरा कहा जाता है।[16] फिर ऑब्जेक्ट को फलन में पास किया जा सकता है जो इसमें उपलब्ध लॉजिकों का उपयोग करता है।

बिल्डर वर्ग द्वारा प्रदान किए गए डिफ़ॉल्ट मानों को ओवरराइड करने की विधि के रूप में मेथड चेनिंग का उपयोग अधिकांशतः बिल्डर पैटर्न के संयोजन में किया जाता है।

यह भी देखें

संदर्भ

  1. एडीए प्रोग्रामिंग भाषा के लिए संदर्भ मैनुअल. United States Department of Defense. 1983.
  2. BillWagner. "नामित और वैकल्पिक तर्क - सी# प्रोग्रामिंग गाइड". docs.microsoft.com (in English). Retrieved 2021-06-16.
  3. "कार्य". lispcookbook.github.io. Retrieved 2021-10-28.
  4. "Functions | Kotlin". Kotlin Help (in English). Retrieved 2021-06-16.
  5. "8. Compound statements". docs.python.org. Retrieved 2021-10-28.
  6. "10.3 Named arguments and defaults". An Introduction to R. Retrieved 2021-10-28.
  7. "PHP: Function arguments - Manual". www.php.net. Retrieved 2021-06-16.
  8. "Ruby 2 Keyword Arguments". thoughtbot.com. 21 July 2014. Retrieved 2021-10-28.
  9. "नामित तर्क". Scala Documentation. Retrieved 2021-06-16.
  10. "Functions — The Swift Programming Language (Swift 5.1)". docs.swift.org. Retrieved 2020-01-27.
  11. KathleenDollard. "स्थिति और नाम के आधार पर तर्क पारित करना - विज़ुअल बेसिक". docs.microsoft.com (in English). Retrieved 2021-06-16.
  12. Developer Library - The Implementation of a Class Provides Its Internal Behavior
  13. "Designated Inits (Using the GNU Compiler Collection (GCC))".
  14. Programming Perl 2.9: Hashes
  15. Perl core module Net::FTP
  16. C++ FAQ, 10.20 What is the "Named Parameter Idiom"?


बाहरी संबंध