मेरी प्राथमिक भाषा सांख्यिकीय रूप से टाइप की गई है (जावा)। जावा में, आपको प्रत्येक विधि से एक एकल प्रकार वापस करना होगा। उदाहरण के लिए, आपके पास कोई ऐसा तरीका नहीं हो सकता है जो सशर्त रूप से String
या सशर्त रिटर्न देता है Integer
। लेकिन जावास्क्रिप्ट में, उदाहरण के लिए, यह बहुत संभव है।
सांख्यिकीय रूप से टाइप की गई भाषा में मुझे लगता है कि यह एक बुरा विचार क्यों है। यदि प्रत्येक विधि वापस आ गई Object
(आम अभिभावक सभी वर्गों से विरासत में मिली) तो आपको और संकलक को पता नहीं है कि आप किसके साथ काम कर रहे हैं। आपको रन टाइम पर अपनी सभी गलतियों का पता लगाना होगा।
लेकिन गतिशील रूप से टाइप की गई भाषा में, कंपाइलर भी नहीं हो सकता है। गतिशील रूप से टाइप की गई भाषा में, मेरे लिए यह स्पष्ट नहीं है कि एक फ़ंक्शन जो कई प्रकारों को वापस करता है, एक बुरा विचार है। स्थिर भाषाओं में मेरी पृष्ठभूमि मुझे इस तरह के कार्यों को लिखने से बचाती है, लेकिन मुझे डर है कि मैं एक ऐसी विशेषता के बारे में सोच रहा हूँ जो मेरे कोड क्लीनर को उन तरीकों से बना सकती है जिन्हें मैं नहीं देख सकता।
संपादित करें : मैं अपना उदाहरण निकालने जा रहा हूं (जब तक मैं एक बेहतर सोच सकता हूं)। मुझे लगता है कि यह लोगों को एक बिंदु पर जवाब देने के लिए स्टीयरिंग है जिसे मैं बनाने की कोशिश नहीं कर रहा हूं।
(coerce var 'string)
पैदावार string
या (concatenate 'string this that the-other-thing)
इसी तरह है। मैंने जैसी बातें लिखी हैं ThingLoader.getThingById (Class<extends FindableThing> klass, long id)
। और, वहाँ, मैं केवल कुछ वापस कर सकता हूँ जो आपके द्वारा मांगे गए उपवर्गों में से loader.getThingById (SubclassA.class, 14)
हो सकता है : जो SubclassB
कि वापस लौटता है SubclassA
...