स्विफ्ट फ़ंक्शन ओवरलोडिंग (उदाहरणों के साथ)

इस लेख में, आप फ़ंक्शन ओवरलोडिंग के बारे में जानेंगे, हमें फ़ंक्शन ओवरलोडिंग की आवश्यकता है और उदाहरणों के साथ ओवरलोड कैसे करें।

एक ही नाम वाले दो या दो से अधिक फ़ंक्शन लेकिन अलग-अलग तर्क (ओं) को अतिभारित कार्यों के रूप में जाना जाता है।

हमें फ़ंक्शन ओवरलोडिंग की आवश्यकता क्यों है?

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

 func attack() ( //… print("Attacking with Knife") ) func attack() ( //… print("Attacking with Blade") ) func attack() ( //… print("Attacking with Gun") ) 

लेकिन जब आप उपरोक्त कार्यक्रम को चलाने की कोशिश करते हैं, तो आपको यहां पहले से घोषित 'हमले ()' के रूप में स्विफ्ट में एक संकलन समय त्रुटि मिलेगी । हालांकि, एक अन्य समाधान विशेष कार्यक्षमता के लिए विभिन्न फ़ंक्शन नामों को परिभाषित कर सकता है:

 struct Knife ( ) struct Gun ( ) struct Blade ( ) func attackUsingKnife(weapon:Knife) ( //… print("Attacking with Knife") ) func attackUsingBlade(weapon:Blade) ( //… print("Attacking with Blade") ) func attackUsingGun(weapon:Gun) ( //… print("Attacking with Gun") ) 

चिंता मत करो अगर तुम नहीं जानते कि क्या संरचना है। अभी के लिए इसे कुछ ऐसा समझें जो प्रोग्रामिंग में एक भौतिक वस्तु बनाता है, इसलिए आप एक चाकू, बंदूक और ब्लेड बना रहे हैं। यदि आप अधिक जानना चाहते हैं, तो स्विफ्ट संरचना देखें। यदि नहीं, तो हम बाद के अध्यायों में वापस आएंगे।

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

विभिन्न नामों के साथ फ़ंक्शन बनाना समय लेने वाला है और इसे कॉल करने के लिए फ़ंक्शन नाम को याद रखने के ओवरहेड बढ़ जाता है। सब सब में, यह सहज नहीं है।

यह बेहतर होगा यदि आप एक ही नाम के साथ अलग-अलग फ़ंक्शन बना सकते हैं लेकिन प्रत्येक हथियार के लिए अलग-अलग कार्यान्वयन। इस तरह, एक फ़ंक्शन नाम याद रखना पर्याप्त है और आपको अन्य हथियारों के फ़ंक्शन नामों के बारे में चिंता करने की आवश्यकता नहीं होगी।

फ़ंक्शन ओवरलोडिंग क्या है?

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

आइए इसे नीचे दिए गए उदाहरण में देखें:

उदाहरण 1: फंक्शन ओवरलोडिंग

 struct Knife ( ) struct Gun ( ) struct Blade ( ) func attack(with weapon:Knife) ( print("Attacking with Knife") ) func attack(with weapon:Gun) ( print("Attacking with Gun") ) func attack(with weapon:Blade) ( print("Attacking with Blade") ) attack(with: Gun()) attack(with: Blade()) attack(with: Knife()) 

जब आप उपरोक्त कार्यक्रम चलाते हैं, तो आउटपुट होगा:

 चाकू के साथ ब्लेड से हमला करने के साथ बंदूक से हमला 

उपरोक्त कार्यक्रम में, हमने एक ही नाम के साथ तीन अलग-अलग फ़ंक्शन बनाए हैं attack। हालाँकि, यह विभिन्न पैरामीटर प्रकारों को स्वीकार करता है। इस तरह attackसे फ़ंक्शन को कॉल करने के लिए नाम याद रखना पर्याप्त है।

  • कॉल attack(with: Gun())फ़ंक्शन के अंदर स्टेटमेंट को ट्रिगर करता है func attack(with weapon:Gun)
  • कॉल attack(with: Blade())फ़ंक्शन के अंदर स्टेटमेंट को ट्रिगर करता है func attack(with weapon:Blade)
  • attack(with: Knife())फ़ंक्शन के अंदर कॉल स्टेटमेंट func attack(with weapon:Knife)

उदाहरण 2: विभिन्न पैरामीटर प्रकारों के आधार पर फ़ंक्शन ओवरलोडिंग

 func output(x:Int) ( print("The int value is (x)") ) func output(x:String) ( print("The string value is (x)") ) output(x: 2) output(x: "Swift") 

जब आप उपरोक्त कार्यक्रम चलाते हैं, तो आउटपुट होगा:

 Int मान 2 है स्ट्रिंग मान स्विफ्ट है 

उपरोक्त कार्यक्रम में, हम एक ही नाम output()और समान मापदंडों के दो कार्य करते हैं । हालाँकि, पहला output()फ़ंक्शन एक पैरामीटर के रूप में पूर्णांक लेता है, और दूसरा output()फ़ंक्शन Stringपैरामीटर के रूप में लेता है ।

उदाहरण 1 के समान,

  • output(x: 2)फ़ंक्शन के अंदर कथन को ट्रिगर करने के लिए func output(x:Int)और
  • output(x: "Swift")फ़ंक्शन के अंदर स्टेटमेंट को ट्रिगर करने के लिए कॉल func output(x:String)

उदाहरण 3: विभिन्न प्रकार के मापदंडों के आधार पर फ़ंक्शन ओवरलोडिंग

 func output() ( print("Good Morning!") ) func output(text:String) ( print(text) ) func output(text:String, num:Int) ( print("(text)(num)!") ) output() output(text: "Good Evening!") output(text1: "Good N", num: 8) 

जब आप उपरोक्त कार्यक्रम चलाते हैं, तो आउटपुट होगा:

शुभ प्रभात! गुड इवनिंग! शुभ रात्रि!

उपरोक्त कार्यक्रम में, output()तर्कों की संख्या के आधार पर फ़ंक्शन को ओवरलोड किया गया है।

पहला output()कोई पैरामीटर नहीं लेता है, दूसरा output()एकल पैरामीटर लेता है: Stringऔर तीसरा output()दो पैरामीटर लेता है: Stringऔर Int

पैरामीटर नाम बदलकर तर्क को ओवरलोड करने की कोशिश करते हैं, लेकिन तर्क लेबल को समान रखते हुए:

उदाहरण 4: एक ही तर्क लेबल के साथ फ़ंक्शन ओवरलोडिंग

 func output(value text:String) ( print(text) ) func output(value num:Int) ( print(num) ) output(value: 2) output(value: "Hello") 

जब आप उपरोक्त कार्यक्रम चलाते हैं, तो आउटपुट होगा:

 २ नमस्कार

जैसा कि आप देख सकते हैं, उपरोक्त कार्यक्रम में, आप ओवरलोड कार्यों के लिए एक ही तर्क लेबल का उपयोग कर सकते हैं। हालांकि, जैसा कि ओवरलोडिंग की आवश्यकता होती है, आपके पास अलग-अलग संख्या में पैरामीटर या विभिन्न प्रकार के पैरामीटर होने चाहिए।

दिलचस्प लेख...