विधि पैरामीटर प्रकार, वापसी प्रकार और संपत्ति प्रकार की संक्षिप्तता के बारे में नियम


9

कुछ समय पहले मैंने विधि पैरामीटर प्रकार, वापसी प्रकार और संपत्ति प्रकार की संक्षिप्तता के बारे में "अंगूठे का नियम" पढ़ा, लेकिन मुझे अभी यह याद नहीं है।

इसने आपके रिटर्न प्रकारों को यथासंभव ठोस रखने और आपके पैरामीटर प्रकारों को यथासंभव सार ... या इसके विपरीत रखने के बारे में कुछ कहा।

मुझे नहीं पता कि यह वास्तव में एक अच्छी या बुरी सलाह थी, इसलिए यदि आपके पास इसके बारे में अपने विचार हैं, तो कृपया एक टिप्पणी दें।

चीयर्स।

जवाबों:


5

कोई और अधिक की आवश्यकता है, कोई कम वादा करें।

वाक्यांश "डिज़ाइन बाय कॉन्ट्रैक्ट" विचारों से निकलता है जो बर्ट्रेंड मेयर द्वारा अग्रणी था।

http://wiki3.cosc.canterbury.ac.nz/index.php/Design_by_contract

"लिस्कोव प्रतिस्थापन सिद्धांत" भी देखें

/programming/56860/what-is-the-liskov-substitution-principle


7

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


4

यह हो सकता है कि आप पोस्टेल के कानून के एक अपवाद को सुन सकते हैं : "जो आप भेजते हैं उसमें रूढ़िवादी बनें, जो आप स्वीकार करते हैं उसमें उदार हैं।"

अधिकतर यह कोड पुन: प्रयोज्य को अधिकतम करने के बारे में है। यह प्रदर्शित करने के लिए मामलों के साथ आना आसान है कि यह क्यों मदद करता है। Iterable<T>एक उदाहरण के रूप में जावा पर विचार करें । यदि केवल एक चीज जो आपकी विधि करती है T, वह सभी s के माध्यम से पुनरावृत्त होती है , तो Iterable<T>आपके पैरामीटर प्रकार के रूप में आपको 60 से अधिक अंतर्निहित कक्षाओं के साथ उस पद्धति का उपयोग करने की अनुमति मिलती है, न कि किसी कस्टम वर्ग का उल्लेख करने के लिए जो इंटरफ़ेस को लागू करता है। यदि आप इसे सीमित करते हैं, कहते हैं, Vector<T>तो आपके पद्धति को कॉल करने वाले किसी भी कोड को Vector<T>पहले बदलना होगा ।

दूसरी ओर, लौटने एक Iterable<T>एक विधि से कोड की राशि है कि उन है कि एक लेने के लिए अपनी वापसी मान का उपयोग कर सकते हैं की सीमा Iterable<T>पैरामीटर। आप एक बहुत ठोस प्रकार वापस करते हैं, की तरह Vector<T>है, तो अपने वापसी मान कोई भी तरीका है कि एक लेता में पारित किया जा सकता Serializable, Cloneable, Iterable<T>, Collection<T>, List<T>, RandomAccess, Vector<T>, AbstractList<T>, या AbstractCollection<T>, और यह उम्मीद के रूप में काम करेंगे।


"सबसे बड़ी सॉफ्टवेयर इंजीनियरिंग गलतियों" की मेरी सूची में पोस्टेल का नियम बहुत अधिक है।
कोडइन्कॉउंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.