नामित पैरामीटर: Difference between revisions
No edit summary |
No edit summary |
||
Line 1: | Line 1: | ||
[[कंप्यूटर प्रोग्रामिंग]] में, '''नामित पैरामीटर''', नामित-पैरामीटर | [[कंप्यूटर प्रोग्रामिंग]] में, '''नामित पैरामीटर''', नामित-पैरामीटर लॉजिक, नामित लॉजिक या कीवर्ड लॉजिक फलन कॉल के लिए प्रत्येक लॉजिक को फलन कॉल के अन्दर दिए गए पैरामीटर [[पैरामीटर (कंप्यूटर विज्ञान)|पैरामीटर]] के साथ स्पष्ट रूप से जोड़ने के लिए कंप्यूटर भाषा के समर्थन को संदर्भित करते हैं। | ||
== सिंहावलोकन == | == सिंहावलोकन == | ||
नामित पैरामीटर का उपयोग करने वाला फलन कॉल नियमित फलन कॉल से भिन्न होता है, जिसमें | नामित पैरामीटर का उपयोग करने वाला फलन कॉल नियमित फलन कॉल से भिन्न होता है, जिसमें लॉजिकों की क्रमबद्ध सूची प्रदान करने के अतिरिक्त, प्रत्येक को पैरामीटर नाम के साथ जोड़कर लॉजिक पारित किए जाते हैं। | ||
उदाहरण के लिए, इस [[जावा (प्रोग्रामिंग भाषा)]] या C# विधि कॉल पर विचार करें, जो नामित पैरामीटर का उपयोग नहीं करता है: | उदाहरण के लिए, इस [[जावा (प्रोग्रामिंग भाषा)]] या C# विधि कॉल पर विचार करें, जो नामित पैरामीटर का उपयोग नहीं करता है: | ||
Line 27: | Line 27: | ||
drawingNow: True); | drawingNow: True); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
स्थितीय | स्थितीय लॉजिक वाला संस्करण अधिक अंतर्निहित है। पैरामीटर नाम देने वाले संस्करण अधिक स्पष्ट हैं। परिस्थिति के आधार पर, प्रोग्रामर को इनमें से एक या दूसरे को पढ़ना आसान लग सकता है। | ||
== प्रोग्रामिंग भाषाओं में उपयोग == | == प्रोग्रामिंग भाषाओं में उपयोग == | ||
Line 34: | Line 34: | ||
== पैरामीटर का क्रम == | == पैरामीटर का क्रम == | ||
उन भाषाओं में जो नामित पैरामीटर का समर्थन नहीं करते हैं, फलन कॉल में | उन भाषाओं में जो नामित पैरामीटर का समर्थन नहीं करते हैं, फलन कॉल में लॉजिकों का क्रम आवश्यक रूप से तय किया जाता है, क्योंकि यह एकमात्र विधि है, जिससे भाषा यह पहचान सकती है कि कौन सा लॉजिक किस पैरामीटर के लिए उपयोग किया जाना है। | ||
नामित पैरामीटर के साथ, सामान्यतः किसी भी क्रम में | नामित पैरामीटर के साथ, सामान्यतः किसी भी क्रम में लॉजिक प्रदान करना संभव होता है, क्योंकि प्रत्येक लॉजिक से जुड़ा पैरामीटर नाम उसके उद्देश्य की पहचान करता है। इससे कार्यक्रम के भागों के बीच सामंजस्य कम हो जाता है। कुछ भाषाएँ नामित पैरामीटर का समर्थन करती हैं, लेकिन फिर भी लॉजिकों को विशिष्ट क्रम में प्रदान करने की आवश्यकता होती है। | ||
== वैकल्पिक पैरामीटर और स्थितीय पैरामीटर== | == वैकल्पिक पैरामीटर और स्थितीय पैरामीटर== | ||
Line 43: | Line 43: | ||
नामित पैरामीटर अधिकांशतः वैकल्पिक पैरामीटर के साथ संयोजन में उपयोग किए जाते हैं। नामित पैरामीटर के बिना, वैकल्पिक पैरामीटर केवल पैरामीटर सूची के अंत में दिखाई दे सकते हैं, क्योंकि यह निर्धारित करने की कोई अन्य विधि नहीं है कि कौन से मान छोड़े गए हैं। चूँकि, नामित वैकल्पिक पैरामीटर का समर्थन करने वाली भाषाओं में, प्रोग्राम उपलब्ध पैरामीटर के किसी भी उपसमूह की आपूर्ति कर सकते हैं, और नामों का उपयोग यह निर्धारित करने के लिए किया जाता है कि कौन से मान प्रदान किए गए हैं। | नामित पैरामीटर अधिकांशतः वैकल्पिक पैरामीटर के साथ संयोजन में उपयोग किए जाते हैं। नामित पैरामीटर के बिना, वैकल्पिक पैरामीटर केवल पैरामीटर सूची के अंत में दिखाई दे सकते हैं, क्योंकि यह निर्धारित करने की कोई अन्य विधि नहीं है कि कौन से मान छोड़े गए हैं। चूँकि, नामित वैकल्पिक पैरामीटर का समर्थन करने वाली भाषाओं में, प्रोग्राम उपलब्ध पैरामीटर के किसी भी उपसमूह की आपूर्ति कर सकते हैं, और नामों का उपयोग यह निर्धारित करने के लिए किया जाता है कि कौन से मान प्रदान किए गए हैं। | ||
[[OCaml]] जैसी भाषाओं में अतिरिक्त जटिलता उत्पन्न होती है, जो वैकल्पिक नामित पैरामीटर और आंशिक अनुप्रयोग दोनों का समर्थन करती है। आंशिक रूप से प्रयुक्त किए गए फलन और उस फलन के बीच अंतर करना सामान्य रूप से असंभव है, जिसमें पैरामीटर का सबसेट प्रदान किया गया है। OCaml सभी वैकल्पिक नामित-पैरामीटर | [[OCaml]] जैसी भाषाओं में अतिरिक्त जटिलता उत्पन्न होती है, जो वैकल्पिक नामित पैरामीटर और आंशिक अनुप्रयोग दोनों का समर्थन करती है। आंशिक रूप से प्रयुक्त किए गए फलन और उस फलन के बीच अंतर करना सामान्य रूप से असंभव है, जिसमें पैरामीटर का सबसेट प्रदान किया गया है। OCaml सभी वैकल्पिक नामित-पैरामीटर लॉजिकों के बाद स्थितिगत लॉजिक की आवश्यकता के द्वारा इस अस्पष्टता को हल करता है: इसकी उपस्थिति या अनुपस्थिति का उपयोग यह तय करने के लिए किया जाता है कि फलन पूरी तरह से या आंशिक रूप से प्रयुक्त किया गया है या नहीं। यदि सभी पैरामीटर वैकल्पिक हैं, तो कार्यान्वयनकर्ता इकाई प्रकार का डमी पोजिशनल पैरामीटर जोड़कर समस्या का समाधान कर सकता है। | ||
[[मीडियाविकि]] में, कोड (चर) <code><nowiki>{{{1}}}</nowiki></code>, <code><nowiki>{{{2}}}</nowiki></code> टेम्प्लेट इत्यादि में, पहले, दूसरे, और इसी तरह अनाम पैरामीटर (या नामित पैरामीटर का मान) द्वारा <code>1</code>, <code>2</code>, इत्यादि प्रतिस्थापित किया जाएगा।); इन्हें {{dfn|स्थितीय पैरामीटर}} के रूप में जाना जाता है। | [[मीडियाविकि]] में, कोड (चर) <code><nowiki>{{{1}}}</nowiki></code>, <code><nowiki>{{{2}}}</nowiki></code> टेम्प्लेट इत्यादि में, पहले, दूसरे, और इसी तरह अनाम पैरामीटर (या नामित पैरामीटर का मान) द्वारा <code>1</code>, <code>2</code>, इत्यादि प्रतिस्थापित किया जाएगा।); इन्हें {{dfn|स्थितीय पैरामीटर}} के रूप में जाना जाता है। | ||
Line 61: | Line 61: | ||
); | ); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
ऐसी टिप्पणियों की सत्यता के लिए जाँच नहीं की जाती है और | ऐसी टिप्पणियों की सत्यता के लिए जाँच नहीं की जाती है और लॉजिकों का क्रम महत्वपूर्ण रहता है। | ||
=== डेटा संरचनाओं के साथ === | === डेटा संरचनाओं के साथ === | ||
लॉजिक आदेश प्रतिबंध को हटाना, और कुछ मानों को अनिर्दिष्ट छोड़ने की क्षमता, [[रिकॉर्ड (कंप्यूटर विज्ञान)]] या सहयोगी ऐरे को पारित करके प्राप्त की जा सकती है। | |||
उदाहरण के लिए, [[जावास्क्रिप्ट]] में, ये दो कॉल समतुल्य हैं: | उदाहरण के लिए, [[जावास्क्रिप्ट]] में, ये दो कॉल समतुल्य हैं: | ||
Line 93: | Line 93: | ||
==== विशेष सहयोग ==== | ==== विशेष सहयोग ==== | ||
[[पर्ल]] और प्री-2.0 रूबी (प्रोग्रामिंग भाषा) में एक समान परंपरा फलन कॉल के अन्दर सीमांकक को हटाने के लिए विशेष समर्थन के साथ उपलब्ध है (सामान्यतः इसे हैश या विकल्प हैश कहा जाता है)।<ref>[https://docstore.mik.ua/orelly/perl/prog3/ch02_09.htm Programming Perl 2.9: Hashes]</ref> उदाहरण के तौर पर, कोर मॉड्यूल का नेट::एफ़टीपी नया फलन वैकल्पिक | [[पर्ल]] और प्री-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> | ||
=== [[ विधि शृंखला |शृंखला]] विधि कॉल के साथ === | === [[ विधि शृंखला |शृंखला]] विधि कॉल के साथ === | ||
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] भाषाओं में, [[धाराप्रवाह इंटरफ़ेस|फ़्लूएंट इंटरफ़ेस]] के रूप में, नामित पैरामीटर को अनुकरण करने के लिए [[ विधि शृंखला |विधि शृंखला]] का उपयोग करना संभव है। प्रत्येक नामित-पैरामीटर | [[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] भाषाओं में, [[धाराप्रवाह इंटरफ़ेस|फ़्लूएंट इंटरफ़ेस]] के रूप में, नामित पैरामीटर को अनुकरण करने के लिए [[ विधि शृंखला |विधि शृंखला]] का उपयोग करना संभव है। प्रत्येक नामित-पैरामीटर लॉजिक को लॉजिक ऑब्जेक्ट पर एक विधि से परिवर्तित कर दिया जाता है, जो संशोधित करता है और फिर ऑब्जेक्ट को वापस कर देता है। 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> फिर ऑब्जेक्ट को फलन में पास किया जा सकता है जो इसमें उपलब्ध लॉजिकों का उपयोग करता है। | ||
बिल्डर वर्ग द्वारा प्रदान किए गए डिफ़ॉल्ट मानों को ओवरराइड करने की विधि के रूप में मेथड चेनिंग का उपयोग अधिकांशतः [[बिल्डर पैटर्न]] के संयोजन में किया जाता है। | बिल्डर वर्ग द्वारा प्रदान किए गए डिफ़ॉल्ट मानों को ओवरराइड करने की विधि के रूप में मेथड चेनिंग का उपयोग अधिकांशतः [[बिल्डर पैटर्न]] के संयोजन में किया जाता है। |
Revision as of 21:32, 20 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] ध्यान दें कि ऑब्जेक्टिव-सी में नामित पैरामीटर नहीं हैं (तथापि विधि नाम के कुछ हिस्से नामित पैरामीटर की तरह दिख सकते हैं)।[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(¶meters);
विशेष सहयोग
पर्ल और प्री-2.0 रूबी (प्रोग्रामिंग भाषा) में एक समान परंपरा फलन कॉल के अन्दर सीमांकक को हटाने के लिए विशेष समर्थन के साथ उपलब्ध है (सामान्यतः इसे हैश या विकल्प हैश कहा जाता है)।[14] उदाहरण के तौर पर, कोर मॉड्यूल का नेट::एफ़टीपी नया फलन वैकल्पिक लॉजिकों के हैश को स्वीकार करता है।[15]
शृंखला विधि कॉल के साथ
ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग भाषाओं में, फ़्लूएंट इंटरफ़ेस के रूप में, नामित पैरामीटर को अनुकरण करने के लिए विधि शृंखला का उपयोग करना संभव है। प्रत्येक नामित-पैरामीटर लॉजिक को लॉजिक ऑब्जेक्ट पर एक विधि से परिवर्तित कर दिया जाता है, जो संशोधित करता है और फिर ऑब्जेक्ट को वापस कर देता है। C++ में, इसे नामित पैरामीटर मुहावरा कहा जाता है।[16] फिर ऑब्जेक्ट को फलन में पास किया जा सकता है जो इसमें उपलब्ध लॉजिकों का उपयोग करता है।
बिल्डर वर्ग द्वारा प्रदान किए गए डिफ़ॉल्ट मानों को ओवरराइड करने की विधि के रूप में मेथड चेनिंग का उपयोग अधिकांशतः बिल्डर पैटर्न के संयोजन में किया जाता है।
यह भी देखें
- सहायता: नामित और स्थितीय पैरामीटर के लिए टेम्पलेट।
- फ़्लूएंट इंटरफ़ेस
- टैग (प्रोग्रामिंग)
संदर्भ
- ↑ एडीए प्रोग्रामिंग भाषा के लिए संदर्भ मैनुअल. United States Department of Defense. 1983.
- ↑ BillWagner. "नामित और वैकल्पिक तर्क - सी# प्रोग्रामिंग गाइड". docs.microsoft.com (in English). Retrieved 2021-06-16.
- ↑ "कार्य". lispcookbook.github.io. Retrieved 2021-10-28.
- ↑ "Functions | Kotlin". Kotlin Help (in English). Retrieved 2021-06-16.
- ↑ "8. Compound statements". docs.python.org. Retrieved 2021-10-28.
- ↑ "10.3 Named arguments and defaults". An Introduction to R. Retrieved 2021-10-28.
- ↑ "PHP: Function arguments - Manual". www.php.net. Retrieved 2021-06-16.
- ↑ "Ruby 2 Keyword Arguments". thoughtbot.com. 21 July 2014. Retrieved 2021-10-28.
- ↑ "नामित तर्क". Scala Documentation. Retrieved 2021-06-16.
- ↑ "Functions — The Swift Programming Language (Swift 5.1)". docs.swift.org. Retrieved 2020-01-27.
- ↑ KathleenDollard. "स्थिति और नाम के आधार पर तर्क पारित करना - विज़ुअल बेसिक". docs.microsoft.com (in English). Retrieved 2021-06-16.
- ↑ Developer Library - The Implementation of a Class Provides Its Internal Behavior
- ↑ "Designated Inits (Using the GNU Compiler Collection (GCC))".
- ↑ Programming Perl 2.9: Hashes
- ↑ Perl core module Net::FTP
- ↑ C++ FAQ, 10.20 What is the "Named Parameter Idiom"?
बाहरी संबंध
- https://web.archive.org/web/20070502112455/http://plg.uwaterloo.ca/~rgesteve/cforall/named_pars.html
- In C++ this paradigm can be easily implemented: Boost Parameter Library
- Named Parameters in various programming languages at Rosetta Code