मैं इस प्रश्न को एक तरह से फ्रेम करने की पूरी कोशिश करने जा रहा हूं, जिसके परिणामस्वरूप भाषा युद्ध या सूची नहीं होती है, क्योंकि मुझे लगता है कि इस प्रश्न का एक अच्छा, तकनीकी उत्तर हो सकता है।
विभिन्न भाषाएं अलग-अलग डिग्री के लिए उपनामों का समर्थन करती हैं। C # प्रत्येक प्रकार की फ़ाइल की शुरुआत में एलियास टाइप करने की अनुमति देता है, और वे केवल उस फ़ाइल में मान्य होते हैं। एमएल / हास्केल जैसी भाषाएं उपनामों का उपयोग शायद उतना ही करती हैं जितना वे टाइप परिभाषाओं का उपयोग करते हैं। C / C ++ एक वाइल्ड वेस्ट की तरह है , जिसका उपयोग अक्सर typedef
और #define
अन्य प्रकार से अलहदा तरीके से किया जाता है।
अलियासिंग के प्रकार बहुत अधिक विवाद उत्पन्न नहीं करते हैं:
- यह समग्र प्रकारों को परिभाषित करने के लिए सुविधाजनक बनाता है जो स्वाभाविक रूप से भाषा द्वारा वर्णित हैं, जैसे
type Coordinate = float * float
याtype String = [Char]
। - लंबे नामों को छोटा किया जा सकता है
using DSBA = System.Diagnostics.DebuggerStepBoundaryAttribute
:। - एमएल या हास्केल जैसी भाषाओं में, जहां फ़ंक्शन पैरामीटर में अक्सर नाम नहीं होते हैं, टाइप एलियास स्व-प्रलेखन का एक झलक प्रदान करते हैं।
नकारात्मक पक्ष थोड़ा और अधिक iffy है: उपनाम प्रसार कर सकते हैं, जिससे कोड को पढ़ना और समझना या एक मंच सीखना मुश्किल हो जाता है। Win32 एपीआई एक अच्छा उदाहरण है, DWORD = int
इसके HINSTANCE = HANDLE = void*
और इसके LPHANDLE = HANDLE FAR*
और इस तरह के साथ। इन सभी मामलों में यह शायद ही किसी हेंडल और एक शून्य सूचक या एक DWORD और एक पूर्णांक आदि के बीच अंतर करने का कोई मतलब नहीं है।
एक दार्शनिक बहस को अलग करते हुए कि क्या एक राजा को अपनी प्रजा को पूरी आज़ादी देनी चाहिए और उन्हें खुद के लिए ज़िम्मेदार होने देना चाहिए या क्या उन्हें अपने सभी संदिग्ध कार्यों में हस्तक्षेप करना चाहिए, क्या एक खुशहाल माध्यम हो सकता है जो टाइप अलियासिंग के लाभों की अनुमति देता है इसके दुरुपयोग के जोखिम को कम करना?
एक उदाहरण के रूप में, लंबे नामों के मुद्दे को अच्छी स्वतः पूर्ण सुविधाओं द्वारा हल किया जा सकता है। उदाहरण के लिए Visual Studio 2010 आपको System.Diagnostics.DebuggerStepBoundaryAttribute के लिए Intellisense को संदर्भित करने के लिए DSBA टाइप करने की अनुमति देगा। क्या अन्य विशेषताएं हो सकती हैं जो अन्य प्रकार के अलियासिंग के अन्य लाभों को अधिक सुरक्षित रूप से प्रदान करेंगी?
DebuggerStepBoundaryAttribute
की तुलना में बहुत अधिक पठनीय है DSBA
। पहले मामले में, आप जानते हैं कि इसका क्या मतलब है। दूसरे में, आपके पास कोई विचार नहीं है। अब आप कोड में इस तरह के बीस अलग-अलग उपनामों का उपयोग करने की कल्पना करें। क्या किसी में इतना साहस होगा कि वह आपके कोड को पढ़ने और समझने की कोशिश करे?