जेनेरिक फ़ंक्शन

From Vigyanwiki
Revision as of 14:55, 3 July 2023 by alpha>Deepak (Deepak moved page सामान्य कार्य to सामान्य फंक्शन without leaving a redirect)

कंप्यूटर प्रोग्रामिंग में, एक सामान्य फ़ंक्शन बहुरूपता (कंप्यूटर विज्ञान) के लिए परिभाषित एक फ़ंक्शन है।

स्थिर रूप से टाइप की गई भाषाओं में

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

सामान्य लिस्प ऑब्जेक्ट सिस्टम में

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग के लिए कुछ प्रणालियों में जैसे कि कॉमन लिस्प ऑब्जेक्ट सिस्टम (सीएलओएस)[1] और डायलन (प्रोग्रामिंग भाषा), एक सामान्य फ़ंक्शन एक ऐसी इकाई है जो समान नाम वाली सभी विधियों से बनी होती है। आम तौर पर एक सामान्य फ़ंक्शन एक वर्ग का एक उदाहरण होता है जो फ़ंक्शन और मानक-ऑब्जेक्ट दोनों से विरासत (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) प्राप्त करता है। इस प्रकार सामान्य फ़ंक्शंस फ़ंक्शंस (जिन्हें तर्कों के साथ बुलाया और लागू किया जा सकता है) और सामान्य ऑब्जेक्ट दोनों हैं। मेटाऑब्जेक्ट प्रोटोकॉल की कला पुस्तक में सीएलओएस सामान्य कार्यों के कार्यान्वयन और उपयोग के बारे में विस्तार से बताया गया है।

लिस्प के शुरुआती ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग एक्सटेंशन में से एक फ्लेवर्स (प्रोग्रामिंग भाषा) है। इसमें स्मॉलटॉक से प्रभावित सामान्य संदेश भेजने वाले प्रतिमान का उपयोग किया गया। संदेश भेजने के लिए फ्लेवर्स सिंटैक्स है:

 (send object :message)

नए फ्लेवर्स के साथ, यह निर्णय लिया गया कि संदेश एक वास्तविक फ़ंक्शन होना चाहिए और सामान्य फ़ंक्शन कॉलिंग सिंटैक्स का उपयोग किया जाना चाहिए:

 (message object)

संदेश अब एक सामान्य फ़ंक्शन, एक ऑब्जेक्ट और फ़ंक्शन अपने आप में है। संदेश के व्यक्तिगत कार्यान्वयन को विधियाँ कहा जाता है।

कॉमनलूप्स में भी यही विचार लागू किया गया था।[2] कॉमन लिस्प ऑब्जेक्ट सिस्टम के लिए नए फ्लेवर और कॉमनलूप्स मुख्य प्रभाव थे।

उदाहरण

सामान्य लिस्प

दो पैरामीटर ऑब्जेक्ट-1 और ऑब्जेक्ट-2 के साथ एक सामान्य फ़ंक्शन को परिभाषित करें। सामान्य फ़ंक्शन का नाम कोलाइड है।

 (defgeneric collide (object-1 object-2))

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

 (defmethod collide ((object-1 asteroid) (object-2 spaceship))
   (format t "asteroid ~a collides with spaceship ~a" object-1 object-2))

सामान्य फ़ंक्शन को कॉल करना:

? (collide (make-instance 'asteroid) (make-instance 'spaceship))
asteroid #<ASTEROID 4020003FD3> collides with spaceship #<SPACESHIP 40200048CB>

कॉमन लिस्प जेनेरिक फ़ंक्शन से अलग-अलग तरीकों को भी पुनः प्राप्त कर सकता है। FIND-METHOD क्षुद्रग्रह और अंतरिक्ष यान वर्गों के लिए विशिष्ट सामान्य फ़ंक्शन कोलाइड से विधि ढूंढता है।

? (find-method #'collide nil (list (find-class 'asteroid) (find-class 'spaceship)))
#<STANDARD-METHOD COLLIDE NIL (ASTEROID SPACESHIP) 4150015E43>


अन्य भाषाओं से तुलना

जेनेरिक फ़ंक्शन मोटे तौर पर स्मॉलटॉक की शर्तों मेथड (कंप्यूटर विज्ञान) से मेल खाते हैं, उल्लेखनीय अपवाद के साथ, स्मॉलटॉक में, रिसीवर का वर्ग एकमात्र निर्धारक है कि कोड का कौन सा निकाय कहा जाता है: तर्कों के प्रकार या मूल्य अप्रासंगिक हैं (एकल प्रेषण) ). एकाधिक प्रेषण वाली प्रोग्रामिंग भाषा में जब एक सामान्य फ़ंक्शन को कॉल किया जाता है, तो विधि प्रेषण सभी तर्कों के आधार पर होता है, न कि केवल एक जो विशेषाधिकार प्राप्त होता है। फ्लेवर्स (प्रोग्रामिंग भाषा) ने भी सामान्य कार्य प्रदान किए, लेकिन केवल एकल प्रेषण।

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


संदर्भ

  1. The Common Lisp Object System: An Overview
  2. "कॉमनलूप्स, लिस्प और ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को मर्ज करना" (PDF). Archived from the original (PDF) on 2011-06-04. Retrieved 2009-12-10.