डक टाइपिंग: Difference between revisions
(Created page with "{{short description|Style of dynamic typing in object-oriented programming}} {{Type systems}} कंप्यूटर प्रोग्रामिंग में डक...") |
No edit summary |
||
Line 1: | Line 1: | ||
{{short description|Style of dynamic typing in object-oriented programming}} | {{short description|Style of dynamic typing in object-oriented programming}} | ||
{{Type systems}} | {{Type systems}} | ||
कंप्यूटर प्रोग्रामिंग में डक टाइपिंग [[ बतख परीक्षण ]] का | कंप्यूटर प्रोग्रामिंग में डक टाइपिंग [[ बतख परीक्षण |बतख परीक्षण]] का अनुप्रयोग है- यदि यह डक की तरह चलता है और यह बत्तख की तरह कांपता है, तो यह डक होना चाहिए- यह निर्धारित करने के लिए कि किसी [[वस्तु (कंप्यूटर विज्ञान)]] का उपयोग किसी विशेष उद्देश्य के लिए किया जा सकता है या नहीं। कर्ताकारक टंकण के साथ, वस्तु ''किसी दिए गए प्रकार'' की होती है, यदि इसे घोषित किया जाता है (या यदि वस्तु के साथ किसी प्रकार का संबंध वस्तु वंशानुक्रम जैसे तंत्र के माध्यम से अनुमान लगाया जाता है)। डक टाइपिंग में, वस्तु ''दिए गए प्रकार'' की होती है, यदि उसमें उस प्रकार के लिए आवश्यक सभी [[विधि (कंप्यूटर प्रोग्रामिंग)]] और गुण हों।<ref>{{Cite web|url=https://docs.python.org/3/glossary.html#term-duck-typing|title=Glossary — Python 3.7.1 documentation|website=docs.python.org|access-date=2018-11-08}}</ref><ref>{{Cite web|date=2020-06-28|title=पायथन डक टाइपिंग - उदाहरण|url=https://techiehours.com/python/python-duck-typing/|access-date=2020-07-26|website=Techie Hours|language=en-US}}</ref> डक टाइपिंग को किसी दी गई वस्तु और किसी प्रकार की आवश्यकताओं के बीच उपयोग-आधारित संरचनात्मक तुल्यता के रूप में देखा जा सकता है। संरचनात्मक प्रकार तुल्यता की और अधिक व्याख्या के लिए [[संरचनात्मक टाइपिंग]] देखें। | ||
== उदाहरण == | == उदाहरण == | ||
यह पायथन (प्रोग्रामिंग लैंग्वेज) 3 में | यह पायथन (प्रोग्रामिंग लैंग्वेज) 3 में सरल उदाहरण है जो दर्शाता है कि किसी भी संदर्भ में किसी भी वस्तु का उपयोग कैसे किया जा सकता है, जब तक कि इसका उपयोग इस तरह से नहीं किया जाता है कि यह समर्थन नहीं करता है। | ||
वर्ग बतख: | वर्ग बतख: | ||
डीईएफ़ तैरना (स्वयं): | डीईएफ़ तैरना (स्वयं): | ||
Line 21: | Line 20: | ||
पशु तैरना () | पशु तैरना () | ||
पशु मक्खी () | पशु मक्खी () | ||
आउटपुट: | आउटपुट: | ||
Line 31: | Line 30: | ||
विशेषता त्रुटि: 'व्हेल' ऑब्जेक्ट में कोई विशेषता नहीं है 'फ्लाई' | विशेषता त्रुटि: 'व्हेल' ऑब्जेक्ट में कोई विशेषता नहीं है 'फ्लाई' | ||
</वाक्यविन्यास हाइलाइट> | </वाक्यविन्यास हाइलाइट> | ||
इसलिए, अगर हम यह मान लें कि जो कुछ भी तैर सकता है वह बतख है क्योंकि बतख तैर सकती हैं, तो हम व्हेल को बतख मानेंगे, लेकिन, अगर हम यह भी मान लें कि उसे उड़ने में सक्षम होना चाहिए, तो व्हेल को नहीं माना जाएगा | इसलिए, अगर हम यह मान लें कि जो कुछ भी तैर सकता है वह बतख है क्योंकि बतख तैर सकती हैं, तो हम व्हेल को बतख मानेंगे, लेकिन, अगर हम यह भी मान लें कि उसे उड़ने में सक्षम होना चाहिए, तो व्हेल को नहीं माना जाएगा बतख। | ||
== सांख्यिकीय रूप से टाइप की गई भाषाओं में == | == सांख्यिकीय रूप से टाइप की गई भाषाओं में == | ||
कुछ टाइप सिस्टम में # स्टेटिक टाइपिंग लैंग्वेज जैसे [[ बू (प्रोग्रामिंग भाषा) ]]<ref>[http://boo.codehaus.org/Duck+Typing Boo: Duck Typing]{{webarchive |url=https://web.archive.org/web/20081006075246/http://boo.codehaus.org/Duck+Typing |date=October 6, 2008 }}</ref> और D_(प्रोग्रामिंग_भाषा),<ref>{{cite web | url=https://forum.dlang.org/post/hf1e1h$81s$1@digitalmars.com | title=Dynamic classes and duck typing }}</ref><ref>{{cite web | url=https://stackoverflow.com/questions/16578676/duck-typing-in-d | title=Metaprogramming - duck typing in D }}</ref> क्लास टाइप चेकिंग को संकलन समय के बजाय रन टाइम पर होने के लिए निर्दिष्ट किया जा सकता है। | कुछ टाइप सिस्टम में # स्टेटिक टाइपिंग लैंग्वेज जैसे [[ बू (प्रोग्रामिंग भाषा) |बू (प्रोग्रामिंग भाषा)]] <ref>[http://boo.codehaus.org/Duck+Typing Boo: Duck Typing]{{webarchive |url=https://web.archive.org/web/20081006075246/http://boo.codehaus.org/Duck+Typing |date=October 6, 2008 }}</ref> और D_(प्रोग्रामिंग_भाषा),<ref>{{cite web | url=https://forum.dlang.org/post/hf1e1h$81s$1@digitalmars.com | title=Dynamic classes and duck typing }}</ref><ref>{{cite web | url=https://stackoverflow.com/questions/16578676/duck-typing-in-d | title=Metaprogramming - duck typing in D }}</ref> क्लास टाइप चेकिंग को संकलन समय के बजाय रन टाइम पर होने के लिए निर्दिष्ट किया जा सकता है। | ||
== अन्य प्रकार की प्रणालियों के साथ तुलना == | == अन्य प्रकार की प्रणालियों के साथ तुलना == | ||
Line 40: | Line 39: | ||
=== [[ संरचनात्मक प्रकार प्रणाली ]]्स === | === [[ संरचनात्मक प्रकार प्रणाली ]]्स === | ||
डक टाइपिंग समान है, लेकिन स्ट्रक्चरल टाइप सिस्टम से अलग है। स्ट्रक्चरल टाइपिंग | डक टाइपिंग समान है, लेकिन स्ट्रक्चरल टाइप सिस्टम से अलग है। स्ट्रक्चरल टाइपिंग टाइप सिस्टम#स्टेटिक टाइपिंग सिस्टम है जो प्रकार की संरचना द्वारा टाइप संगतता और समानता निर्धारित करता है, जबकि डक टाइपिंग टाइप सिस्टम#डायनेमिक टाइपिंग है और टाइप की संरचना के केवल उस भाग द्वारा टाइप संगतता निर्धारित करता है जिसे रन टाइम (प्रोग्राम) के दौरान एक्सेस किया जाता है जीवनचक्र चरण)। | ||
[[ टाइपप्रति ]],<ref>{{Cite web|url=https://www.se-radio.net/2019/10/episode-384-boris-cherny-on-typescript|title=SE Radio Episode 384: Boris Cherny on TypeScript|website=se-radio.net|access-date=2019-10-25}}</ref> [[एल्म (प्रोग्रामिंग भाषा)]],<ref>{{cite web|url=http://guide.elm-lang.org/core_language.html|title=Core Language · An Introduction to Elm|first=Evan|last=Czaplicki|access-date=30 January 2017}}</ref> और पायथन (प्रोग्रामिंग भाषा)<ref>{{Cite web|url=https://peps.python.org/pep-0544/|title=PEP 544 – Protocols: Structural subtyping (static duck typing)}}</ref> भाषाएँ अलग-अलग डिग्री के लिए संरचनात्मक टाइपिंग का समर्थन करती हैं। | [[ टाइपप्रति ]],<ref>{{Cite web|url=https://www.se-radio.net/2019/10/episode-384-boris-cherny-on-typescript|title=SE Radio Episode 384: Boris Cherny on TypeScript|website=se-radio.net|access-date=2019-10-25}}</ref> [[एल्म (प्रोग्रामिंग भाषा)]],<ref>{{cite web|url=http://guide.elm-lang.org/core_language.html|title=Core Language · An Introduction to Elm|first=Evan|last=Czaplicki|access-date=30 January 2017}}</ref> और पायथन (प्रोग्रामिंग भाषा)<ref>{{Cite web|url=https://peps.python.org/pep-0544/|title=PEP 544 – Protocols: Structural subtyping (static duck typing)}}</ref> भाषाएँ अलग-अलग डिग्री के लिए संरचनात्मक टाइपिंग का समर्थन करती हैं। | ||
Line 46: | Line 45: | ||
=== प्रोटोकॉल और इंटरफेस === | === प्रोटोकॉल और इंटरफेस === | ||
[[प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] स्पष्ट रूप से घोषित करने का | [[प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] स्पष्ट रूप से घोषित करने का तरीका प्रदान करता है, कि कुछ विधियों, ऑपरेटरों या व्यवहारों को परिभाषित करने की आवश्यकता है (उदाहरण के लिए क्वैक () विधि होनी चाहिए)। यदि कोई तृतीय-पक्ष पुस्तकालय वर्ग को लागू करता है जिसे संशोधित नहीं किया जा सकता है, तो क्लाइंट उस पुस्तकालय के लिए अज्ञात इंटरफ़ेस के साथ इसका उदाहरण उपयोग नहीं कर सकता है, भले ही कक्षा वास्तव में इंटरफ़ेस आवश्यकताओं को पूरा करती हो। इस समस्या का सामान्य समाधान [[एडेप्टर पैटर्न]] है। इसके विपरीत, बतख टाइपिंग के तहत, एडॉप्टर की आवश्यकता के बिना वस्तु को सीधे स्वीकार किया जाएगा। | ||
=== साँचे या सामान्य प्रकार === | === साँचे या सामान्य प्रकार === | ||
[[टेम्पलेट मेटाप्रोग्रामिंग]], या [[सामान्य प्रोग्रामिंग]] फ़ंक्शंस या विधियाँ टाइप सिस्टम | [[टेम्पलेट मेटाप्रोग्रामिंग]], या [[सामान्य प्रोग्रामिंग]] फ़ंक्शंस या विधियाँ टाइप सिस्टम स्टेटिक टाइपिंग संदर्भ में डक टेस्ट लागू करती हैं; यह टाइप सिस्टम के सभी फायदे और नुकसान लाता है # सामान्य रूप से व्यवहार में स्थैतिक और गतिशील प्रकार की जाँच। डक टाइपिंग भी अधिक लचीली हो सकती है, जिसमें केवल वास्तव में रनटाइम पर बुलाए जाने वाले तरीकों को लागू करने की आवश्यकता होती है, जबकि टेम्प्लेट को उन सभी तरीकों के कार्यान्वयन की आवश्यकता होती है जो संकलन समय पर अगम्य कोड साबित नहीं हो सकते। | ||
जावा, स्काला और ऑब्जेक्टिव-सी जैसी भाषाओं में, [[प्रतिबिंब (कंप्यूटर प्रोग्रामिंग)]] का उपयोग यह जांचने के लिए किया जा सकता है कि क्या ऑब्जेक्ट विधियों को लागू करते हैं या रनटाइम पर आवश्यक तरीके भी जोड़ते हैं। | जावा, स्काला और ऑब्जेक्टिव-सी जैसी भाषाओं में, [[प्रतिबिंब (कंप्यूटर प्रोग्रामिंग)]] का उपयोग यह जांचने के लिए किया जा सकता है कि क्या ऑब्जेक्ट विधियों को लागू करते हैं या रनटाइम पर आवश्यक तरीके भी जोड़ते हैं। | ||
उदाहरण के लिए, [[जावा (प्रोग्रामिंग भाषा)]] का [https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/invoke/MethodHandle.html MethodHandle API] कर सकता है इस तरह इस्तेमाल किया जाए।<ref>{{cite web|url=https://stackoverflow.com/questions/62321273/implement-duck-typing-using-java-methodhandles|title=StackOverflow: Implement duck typing using java MethodHandles|access-date=13 June 2020}}</ref> | उदाहरण के लिए, [[जावा (प्रोग्रामिंग भाषा)]] का [https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/invoke/MethodHandle.html MethodHandle API] कर सकता है इस तरह इस्तेमाल किया जाए।<ref>{{cite web|url=https://stackoverflow.com/questions/62321273/implement-duck-typing-using-java-methodhandles|title=StackOverflow: Implement duck typing using java MethodHandles|access-date=13 June 2020}}</ref> | ||
== यह भी देखें == | == यह भी देखें == | ||
Revision as of 23:07, 7 March 2023
Type systems |
---|
General concepts |
Major categories |
|
Minor categories |
कंप्यूटर प्रोग्रामिंग में डक टाइपिंग बतख परीक्षण का अनुप्रयोग है- यदि यह डक की तरह चलता है और यह बत्तख की तरह कांपता है, तो यह डक होना चाहिए- यह निर्धारित करने के लिए कि किसी वस्तु (कंप्यूटर विज्ञान) का उपयोग किसी विशेष उद्देश्य के लिए किया जा सकता है या नहीं। कर्ताकारक टंकण के साथ, वस्तु किसी दिए गए प्रकार की होती है, यदि इसे घोषित किया जाता है (या यदि वस्तु के साथ किसी प्रकार का संबंध वस्तु वंशानुक्रम जैसे तंत्र के माध्यम से अनुमान लगाया जाता है)। डक टाइपिंग में, वस्तु दिए गए प्रकार की होती है, यदि उसमें उस प्रकार के लिए आवश्यक सभी विधि (कंप्यूटर प्रोग्रामिंग) और गुण हों।[1][2] डक टाइपिंग को किसी दी गई वस्तु और किसी प्रकार की आवश्यकताओं के बीच उपयोग-आधारित संरचनात्मक तुल्यता के रूप में देखा जा सकता है। संरचनात्मक प्रकार तुल्यता की और अधिक व्याख्या के लिए संरचनात्मक टाइपिंग देखें।
उदाहरण
यह पायथन (प्रोग्रामिंग लैंग्वेज) 3 में सरल उदाहरण है जो दर्शाता है कि किसी भी संदर्भ में किसी भी वस्तु का उपयोग कैसे किया जा सकता है, जब तक कि इसका उपयोग इस तरह से नहीं किया जाता है कि यह समर्थन नहीं करता है।
वर्ग बतख:
डीईएफ़ तैरना (स्वयं): प्रिंट (डक स्विमिंग)
डेफ फ्लाई (स्वयं): प्रिंट (डक फ्लाइंग)
कक्षा व्हेल:
डीईएफ़ तैरना (स्वयं): प्रिंट (व्हेल तैराकी)
[डक (), व्हेल ()] में जानवरों के लिए:
पशु तैरना () पशु मक्खी ()
आउटपुट:
सिंटैक्सहाइलाइट लैंग = आउटपुट> बतख तैरना बत्तख उड़ रही है व्हेल तैरना विशेषता त्रुटि: 'व्हेल' ऑब्जेक्ट में कोई विशेषता नहीं है 'फ्लाई' </वाक्यविन्यास हाइलाइट> इसलिए, अगर हम यह मान लें कि जो कुछ भी तैर सकता है वह बतख है क्योंकि बतख तैर सकती हैं, तो हम व्हेल को बतख मानेंगे, लेकिन, अगर हम यह भी मान लें कि उसे उड़ने में सक्षम होना चाहिए, तो व्हेल को नहीं माना जाएगा बतख।
सांख्यिकीय रूप से टाइप की गई भाषाओं में
कुछ टाइप सिस्टम में # स्टेटिक टाइपिंग लैंग्वेज जैसे बू (प्रोग्रामिंग भाषा) [3] और D_(प्रोग्रामिंग_भाषा),[4][5] क्लास टाइप चेकिंग को संकलन समय के बजाय रन टाइम पर होने के लिए निर्दिष्ट किया जा सकता है।
अन्य प्रकार की प्रणालियों के साथ तुलना
संरचनात्मक प्रकार प्रणाली ्स
डक टाइपिंग समान है, लेकिन स्ट्रक्चरल टाइप सिस्टम से अलग है। स्ट्रक्चरल टाइपिंग टाइप सिस्टम#स्टेटिक टाइपिंग सिस्टम है जो प्रकार की संरचना द्वारा टाइप संगतता और समानता निर्धारित करता है, जबकि डक टाइपिंग टाइप सिस्टम#डायनेमिक टाइपिंग है और टाइप की संरचना के केवल उस भाग द्वारा टाइप संगतता निर्धारित करता है जिसे रन टाइम (प्रोग्राम) के दौरान एक्सेस किया जाता है जीवनचक्र चरण)।
टाइपप्रति ,[6] एल्म (प्रोग्रामिंग भाषा),[7] और पायथन (प्रोग्रामिंग भाषा)[8] भाषाएँ अलग-अलग डिग्री के लिए संरचनात्मक टाइपिंग का समर्थन करती हैं।
प्रोटोकॉल और इंटरफेस
प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) स्पष्ट रूप से घोषित करने का तरीका प्रदान करता है, कि कुछ विधियों, ऑपरेटरों या व्यवहारों को परिभाषित करने की आवश्यकता है (उदाहरण के लिए क्वैक () विधि होनी चाहिए)। यदि कोई तृतीय-पक्ष पुस्तकालय वर्ग को लागू करता है जिसे संशोधित नहीं किया जा सकता है, तो क्लाइंट उस पुस्तकालय के लिए अज्ञात इंटरफ़ेस के साथ इसका उदाहरण उपयोग नहीं कर सकता है, भले ही कक्षा वास्तव में इंटरफ़ेस आवश्यकताओं को पूरा करती हो। इस समस्या का सामान्य समाधान एडेप्टर पैटर्न है। इसके विपरीत, बतख टाइपिंग के तहत, एडॉप्टर की आवश्यकता के बिना वस्तु को सीधे स्वीकार किया जाएगा।
साँचे या सामान्य प्रकार
टेम्पलेट मेटाप्रोग्रामिंग, या सामान्य प्रोग्रामिंग फ़ंक्शंस या विधियाँ टाइप सिस्टम स्टेटिक टाइपिंग संदर्भ में डक टेस्ट लागू करती हैं; यह टाइप सिस्टम के सभी फायदे और नुकसान लाता है # सामान्य रूप से व्यवहार में स्थैतिक और गतिशील प्रकार की जाँच। डक टाइपिंग भी अधिक लचीली हो सकती है, जिसमें केवल वास्तव में रनटाइम पर बुलाए जाने वाले तरीकों को लागू करने की आवश्यकता होती है, जबकि टेम्प्लेट को उन सभी तरीकों के कार्यान्वयन की आवश्यकता होती है जो संकलन समय पर अगम्य कोड साबित नहीं हो सकते।
जावा, स्काला और ऑब्जेक्टिव-सी जैसी भाषाओं में, प्रतिबिंब (कंप्यूटर प्रोग्रामिंग) का उपयोग यह जांचने के लिए किया जा सकता है कि क्या ऑब्जेक्ट विधियों को लागू करते हैं या रनटाइम पर आवश्यक तरीके भी जोड़ते हैं।
उदाहरण के लिए, जावा (प्रोग्रामिंग भाषा) का MethodHandle API कर सकता है इस तरह इस्तेमाल किया जाए।[9]
यह भी देखें
संदर्भ
- ↑ "Glossary — Python 3.7.1 documentation". docs.python.org. Retrieved 2018-11-08.
- ↑ "पायथन डक टाइपिंग - उदाहरण". Techie Hours (in English). 2020-06-28. Retrieved 2020-07-26.
- ↑ Boo: Duck TypingArchived October 6, 2008, at the Wayback Machine
- ↑ "Dynamic classes and duck typing".
- ↑ "Metaprogramming - duck typing in D".
- ↑ "SE Radio Episode 384: Boris Cherny on TypeScript". se-radio.net. Retrieved 2019-10-25.
- ↑ Czaplicki, Evan. "Core Language · An Introduction to Elm". Retrieved 30 January 2017.
- ↑ "PEP 544 – Protocols: Structural subtyping (static duck typing)".
- ↑ "StackOverflow: Implement duck typing using java MethodHandles". Retrieved 13 June 2020.