यदि आप किसी विधि का नाम बदलते हैं, तो यह अब अतिभारित होने वाला नहीं है। अपने आप में, ओवरलोडिंग जरूरी कोड को कम पठनीय नहीं बनाता है, हालांकि यह सिंटैक्स स्पष्ट नहीं होने पर कार्यान्वयन को और अधिक कठिन बना सकता है।
कई भाषाएं एक इंटरफ़ेस को कार्यक्षमता के लिए पेश करने के साधन के रूप में ओवरलोडिंग का उपयोग करती हैं जहां पैरामीटर वैकल्पिक हो सकते हैं और वैकल्पिक मापदंडों के लिए चूक निहित हैं। यह उन भाषाओं के लिए विशेष रूप से सच है जो विधि घोषणा में डिफ़ॉल्ट पैरामीटर सिंटैक्स का समर्थन नहीं करते हैं।
तो यह कर:
void MyMethod(int param1, int param2 = 10)
{
...
}
आपको ऐसा करने से बचाता है:
void MyMethod(int param1)
{
MyMethod(param1, Param2Default);
}
void MyMethod(int param1, int param2)
{
....
}
जैसा कि अधिक पठनीय है, कि वास्तव में आप के लिए नीचे आता है। व्यक्तिगत रूप से मैं दूसरा विकल्प पसंद करता हूं, खासकर जब पैरामीटर सूची थोड़ी लंबी हो रही है, लेकिन मुझे लगता है कि यह वास्तव में तब तक कोई फर्क नहीं पड़ता जब तक आप अपने एपीआई में लगातार होते हैं।
ओवरलोडिंग के साथ कठिनाई तब होती है जब आप ऐसे कार्य चाहते हैं जो अनिवार्य रूप से एक ही काम करते हैं, और जहां आप चाहते हैं कि पैरामीटर सूची समान हो, लेकिन वापसी के प्रकार अलग-अलग हों। अधिकांश भाषाओं को पता नहीं है कि एक ही नाम के दो तरीकों के बीच अंतर कैसे करें, लेकिन अलग-अलग रिटर्न प्रकारों के साथ। इस बिंदु पर, आपको जेनेरिक का उपयोग करने, पैरामीटर इंटरफ़ेस को बदलने या रिटर्न प्रकार में अंतर को इंगित करने के लिए अपने किसी एक तरीके का नाम बदलने के बारे में सोचने की आवश्यकता है। यह वह जगह है जहां पठनीयता एक बड़ा मुद्दा बन सकती है, अगर आप इस तरह की स्थितियों से निपटने के लिए एक सरल और स्पष्ट नामकरण योजना पर समझौता नहीं करते हैं।
अपने अतिभारित तरीकों का नामकरण करना GetSomething()
और GetSomethingEx()
आपके तरीकों के बीच अंतर क्या हैं, इसके बारे में बहुत कुछ कहने नहीं जा रहा है, खासकर अगर यह वापसी प्रकार हैं जो उनके बीच एकमात्र अंतर हैं। दूसरी ओर, GetSomethingAsInt()
और GetSomethingAsString()
आपको थोड़ा और बताएं कि तरीके क्या कर रहे हैं, और जब सख्ती से अधिभार नहीं है, तो संकेत दें कि दोनों विधियां समान चीजें करती हैं, फिर भी विभिन्न प्रकार के मूल्य लौटाते हैं। मुझे पता है कि ऐसे अन्य तरीके हैं जिनसे आप विधियों का नाम ले सकते हैं, हालांकि बिंदु को दर्शाने के उद्देश्यों के लिए, इन कच्चे उदाहरणों को करना चाहिए।
ओपी उदाहरण में, नाम बदलना कड़ाई से आवश्यक नहीं है क्योंकि विधि पैरामीटर अलग-अलग हैं, हालांकि यह किसी विधि को विशेष रूप से नाम देने के लिए चीजों को थोड़ा स्पष्ट करता है। अंत में, यह वास्तव में उस प्रकार के इंटरफ़ेस के नीचे आता है जिसे आप अपने उपयोगकर्ताओं को प्रस्तुत करना चाहते हैं। ओवरलोड नहीं करने पर एक निर्णय केवल पठनीयता की आपकी अपनी धारणा के आधार पर नहीं किया जाना चाहिए। उदाहरण के लिए ओवरलोडिंग विधियाँ एक API इंटरफ़ेस को सरल बना सकती हैं और उन तरीकों की संख्या को कम कर सकती हैं, जिन्हें एक डेवलपर को याद रखने की आवश्यकता हो सकती है, दूसरी ओर, यह इंटरफ़ेस को एक हद तक बाधित कर सकता है, जिसे समझने के लिए डेवलपर को विधि प्रलेखन पढ़ने की आवश्यकता होती है विधि का उपयोग करने के लिए, जबकि समान रूप से अभी तक वर्णनात्मक रूप से नामित विधियों के होने के कारण इसे और अधिक स्पष्ट किया जा सकता है, बस इसके उद्देश्य के लिए एक विधि का नाम पढ़ा जा सकता है।