डक टाइपिंग: Difference between revisions
No edit summary |
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 में सरल उदाहरण है जो दर्शाता है कि किसी भी संदर्भ में किसी भी वस्तु का उपयोग कैसे किया जा सकता है, जब तक कि इसका उपयोग इस तरह से नहीं किया जाता है कि यह समर्थन नहीं करता है। | ||
वर्ग | वर्ग डक: | ||
class Duck: | |||
def swim(self): | |||
print("Duck swimming") | |||
def fly(self): | |||
print("Duck flying") | |||
class Whale: | |||
def swim(self): | |||
print("Whale swimming") | |||
for animal in [Duck(), Whale()]: | |||
animal.swim() | |||
animal.fly() | |||
output: | |||
Duck swimming | |||
Duck flying | |||
Whale swimming | |||
AttributeError: 'Whale' object has no attribute 'fly' | |||
== सांख्यिकीय रूप से टाइप की गई भाषाओं में == | == सांख्यिकीय रूप से टाइप की गई भाषाओं में == | ||
कुछ | कुछ टाइपिंग सिस्टम स्टेटिक टाइपिंग भाषा जैसे [[ बू (प्रोग्रामिंग भाषा) |बू (प्रोग्रामिंग भाषा)]] <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> और डी (प्रोग्रामिंग भाषा),<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>{{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> भाषाएँ अलग-अलग डिग्री के लिए संरचनात्मक टाइपिंग का समर्थन करती हैं। | ||
=== प्रोटोकॉल और इंटरफेस === | === प्रोटोकॉल और इंटरफेस === | ||
[[प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] स्पष्ट रूप से घोषित करने | [[प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] स्पष्ट रूप से घोषित करने की विधि प्रदान करता है, जिससे कि कुछ विधियों में ऑपरेटरों के व्यवहारों को परिभाषित करने की आवश्यकता मिलती है (उदाहरण के लिए क्वैक () विधि होनी चाहिए)। यदि कोई तृतीय-पक्ष लाईब्रेरी वर्ग को लागू करता है जिसे संशोधित नहीं किया जा सकता है, तो इस प्रकार क्लाइंट उस लाइब्रेरी के लिए अज्ञात इंटरफ़ेस के साथ इसका उदाहरण उपयोग नहीं कर सकता है, भले ही क्लास वास्तव में इंटरफ़ेस आवश्यकताओं को पूर्ण करती हो। इस समस्या का सामान्य समाधान [[एडेप्टर पैटर्न]] है। इसके विपरीत, डक टाइपिंग के तहत, एडॉप्टर की आवश्यकता के बिना वस्तु को सीधे स्वीकार किया जाता हैं। | ||
=== साँचे या सामान्य प्रकार === | === साँचे या सामान्य प्रकार === | ||
[[टेम्पलेट मेटाप्रोग्रामिंग]], या [[सामान्य प्रोग्रामिंग]] फ़ंक्शंस या विधियाँ | [[टेम्पलेट मेटाप्रोग्रामिंग]], या [[सामान्य प्रोग्रामिंग]] फ़ंक्शंस या विधियाँ टाइपिंग सिस्टम स्टेटिक टाइपिंग संदर्भ में डक टेस्ट लागू करती हैं, यह टाइपिंग सिस्टम के सभी लाभ और हानि लाता है। इस प्रकार सामान्य रूप से व्यवहार में स्थैतिक और गतिशील प्रकार की जाँच की जाती हैं। इस प्रकार डक टाइपिंग भी अधिक लचीली हो सकती है, जिसमें केवल वास्तव में रनटाइम पर बुलाए जाने वाली विधियों को लागू करने की आवश्यकता होती है, जबकि टेम्प्लेट को उन सभी विधियों के कार्यान्वयन की आवश्यकता होती है जो संकलन समय पर अगम्य कोड प्रमाणित नहीं हो सकते हैं। | ||
जावा, स्काला और ऑब्जेक्टिव-सी जैसी भाषाओं में, [[प्रतिबिंब (कंप्यूटर प्रोग्रामिंग)]] का उपयोग यह जांचने के लिए किया जा सकता है कि क्या ऑब्जेक्ट विधियों को लागू करते हैं या रनटाइम पर आवश्यक | जावा, स्काला और ऑब्जेक्टिव-सी जैसी भाषाओं में, [[प्रतिबिंब (कंप्यूटर प्रोग्रामिंग)]] का उपयोग यह जांचने के लिए किया जा सकता है कि क्या ऑब्जेक्ट विधियों को लागू करते हैं या रनटाइम पर आवश्यक विधियों को भी जोड़ते हैं। | ||
उदाहरण के लिए, [[जावा (प्रोग्रामिंग भाषा)]] का [https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/invoke/MethodHandle.html | उदाहरण के लिए, [[जावा (प्रोग्रामिंग भाषा)]] का [https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/lang/invoke/MethodHandle.html मेथड हैंडल एपीआई] कर सकता है, इस प्रकार इसका उपयोग किया जाता हैं।<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> | ||
== यह भी देखें == | == यह भी देखें == | ||
Line 59: | Line 58: | ||
* [[यूएफसीएस]] | * [[यूएफसीएस]] | ||
* [[लूस कपलिंग]] | * [[लूस कपलिंग]] | ||
* | * मंकी पैच | ||
* [[गतिशील प्रोग्रामिंग भाषा]] | * [[गतिशील प्रोग्रामिंग भाषा]] | ||
Revision as of 23:24, 7 March 2023
Type systems |
---|
General concepts |
Major categories |
|
Minor categories |
कंप्यूटर प्रोग्रामिंग में डक टाइपिंग डक परीक्षण का अनुप्रयोग है, इस प्रकार यदि यह डक की तरह रन करें और डक की तरह ही कंपन करने लगे तो यह डक का रूप होना चाहिए। यह निर्धारित करने के लिए किसी वस्तु (कंप्यूटर विज्ञान) का उपयोग किसी विशेष उद्देश्य के लिए किया जा सकता है या नहीं यह जाँच की जाती हैं। इस प्रकार कर्ताकारक टाइपिंग के साथ, कोई वस्तु किसी दिए गए प्रकार पर निर्भर करती है, इस प्रकार यदि इसे घोषित किया जाता है या यदि वस्तु के साथ किसी प्रकार का संबंध वस्तु वंशानुक्रम जैसे तंत्र के माध्यम से अनुमान लगाया जाता है। डक टाइपिंग में कोई वस्तु मुख्य रूप से किसी दिए गए प्रकार की होती है, यदि उसमें उस प्रकार के लिए आवश्यक सभी विधि (कंप्यूटर प्रोग्रामिंग) और गुण होते हैं।[1][2] इस प्रकार डक टाइपिंग को किसी दी गई वस्तु और किसी प्रकार की आवश्यकताओं के बीच उपयोग-आधारित संरचनात्मक तुल्यता के रूप में देखा जा सकता है। इस प्रकार संरचनात्मक प्रकार से इसकी तुल्यता की और अधिक व्याख्या के लिए संरचनात्मक टाइपिंग की ओर आप देख सकते हैं।
उदाहरण
यह पायथन (प्रोग्रामिंग लैंग्वेज) 3 में सरल उदाहरण है जो दर्शाता है कि किसी भी संदर्भ में किसी भी वस्तु का उपयोग कैसे किया जा सकता है, जब तक कि इसका उपयोग इस तरह से नहीं किया जाता है कि यह समर्थन नहीं करता है।
वर्ग डक:
class Duck: def swim(self): print("Duck swimming") def fly(self): print("Duck flying") class Whale: def swim(self): print("Whale swimming") for animal in [Duck(), Whale()]: animal.swim()
animal.fly()
output: Duck swimming
Duck flying Whale swimming
AttributeError: 'Whale' object has no attribute 'fly'
सांख्यिकीय रूप से टाइप की गई भाषाओं में
कुछ टाइपिंग सिस्टम स्टेटिक टाइपिंग भाषा जैसे बू (प्रोग्रामिंग भाषा) [3] और डी (प्रोग्रामिंग भाषा),[4][5] क्लास टाइप चेकिंग को संकलन समय के बजाय रन टाइम पर होने के लिए निर्दिष्ट किया जा सकता है।
अन्य प्रकार की प्रणालियों के साथ तुलना
संरचनात्मक प्रकार प्रणाली
डक टाइपिंग समान है किन्तु स्ट्रक्चरल टाइपिंग सिस्टम से अलग है। स्ट्रक्चरल टाइपिंग टाइपिंग सिस्टम स्टेटिक टाइपिंग सिस्टम है जो एक प्रकार की संरचना द्वारा टाइप संगतता और समानता निर्धारित करता है, जबकि डक टाइपिंग टाइपिंग सिस्टम डायनेमिक टाइपिंग सिस्टम है और टाइपिंग की संरचना के केवल उस भाग द्वारा टाइप संगतता निर्धारित करता है जिसे रन टाइम (प्रोग्राम) के समय एक्सेस किया जाता है।
इस प्रकार टाइपप्रति ,[6] एल्म (प्रोग्रामिंग भाषा),[7] और पायथन (प्रोग्रामिंग भाषा)[8] भाषाएँ अलग-अलग डिग्री के लिए संरचनात्मक टाइपिंग का समर्थन करती हैं।
प्रोटोकॉल और इंटरफेस
प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) स्पष्ट रूप से घोषित करने की विधि प्रदान करता है, जिससे कि कुछ विधियों में ऑपरेटरों के व्यवहारों को परिभाषित करने की आवश्यकता मिलती है (उदाहरण के लिए क्वैक () विधि होनी चाहिए)। यदि कोई तृतीय-पक्ष लाईब्रेरी वर्ग को लागू करता है जिसे संशोधित नहीं किया जा सकता है, तो इस प्रकार क्लाइंट उस लाइब्रेरी के लिए अज्ञात इंटरफ़ेस के साथ इसका उदाहरण उपयोग नहीं कर सकता है, भले ही क्लास वास्तव में इंटरफ़ेस आवश्यकताओं को पूर्ण करती हो। इस समस्या का सामान्य समाधान एडेप्टर पैटर्न है। इसके विपरीत, डक टाइपिंग के तहत, एडॉप्टर की आवश्यकता के बिना वस्तु को सीधे स्वीकार किया जाता हैं।
साँचे या सामान्य प्रकार
टेम्पलेट मेटाप्रोग्रामिंग, या सामान्य प्रोग्रामिंग फ़ंक्शंस या विधियाँ टाइपिंग सिस्टम स्टेटिक टाइपिंग संदर्भ में डक टेस्ट लागू करती हैं, यह टाइपिंग सिस्टम के सभी लाभ और हानि लाता है। इस प्रकार सामान्य रूप से व्यवहार में स्थैतिक और गतिशील प्रकार की जाँच की जाती हैं। इस प्रकार डक टाइपिंग भी अधिक लचीली हो सकती है, जिसमें केवल वास्तव में रनटाइम पर बुलाए जाने वाली विधियों को लागू करने की आवश्यकता होती है, जबकि टेम्प्लेट को उन सभी विधियों के कार्यान्वयन की आवश्यकता होती है जो संकलन समय पर अगम्य कोड प्रमाणित नहीं हो सकते हैं।
जावा, स्काला और ऑब्जेक्टिव-सी जैसी भाषाओं में, प्रतिबिंब (कंप्यूटर प्रोग्रामिंग) का उपयोग यह जांचने के लिए किया जा सकता है कि क्या ऑब्जेक्ट विधियों को लागू करते हैं या रनटाइम पर आवश्यक विधियों को भी जोड़ते हैं।
उदाहरण के लिए, जावा (प्रोग्रामिंग भाषा) का मेथड हैंडल एपीआई कर सकता है, इस प्रकार इसका उपयोग किया जाता हैं।[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.