प्रकार / उपनाम / पर्यायवाची शब्द पर विचार?


10

मैं इस प्रश्न को एक तरह से फ्रेम करने की पूरी कोशिश करने जा रहा हूं, जिसके परिणामस्वरूप भाषा युद्ध या सूची नहीं होती है, क्योंकि मुझे लगता है कि इस प्रश्न का एक अच्छा, तकनीकी उत्तर हो सकता है।

विभिन्न भाषाएं अलग-अलग डिग्री के लिए उपनामों का समर्थन करती हैं। 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 टाइप करने की अनुमति देगा। क्या अन्य विशेषताएं हो सकती हैं जो अन्य प्रकार के अलियासिंग के अन्य लाभों को अधिक सुरक्षित रूप से प्रदान करेंगी?


Intellisense या नहीं, System.Diagnostics.DebuggerStepBoundaryAttribute DSBA की तुलना में कोड में बहुत कम पठनीय है, खासकर जब अक्सर उपयोग किया जाता है।
झवरा

@ ज़र्बा: वास्तव में, DebuggerStepBoundaryAttributeकी तुलना में बहुत अधिक पठनीय है DSBA। पहले मामले में, आप जानते हैं कि इसका क्या मतलब है। दूसरे में, आपके पास कोई विचार नहीं है। अब आप कोड में इस तरह के बीस अलग-अलग उपनामों का उपयोग करने की कल्पना करें। क्या किसी में इतना साहस होगा कि वह आपके कोड को पढ़ने और समझने की कोशिश करे?
बजे आर्सेनी मूरज़ेंको

जवाबों:


3

मेरे दिमाग में दो विशेषताएं आईं:

पोर्टेबिलिटी। सी, डेटाटाइप्स चाहते जहां जैसी भाषाओं में intमंच विशिष्ट, जैसे किसी अन्य नाम हैं DWORDयह आसान तुम सच में एक 32bit हर जगह पूर्णांक हस्ताक्षर किए उपयोग कर रहे हैं सुनिश्चित करने के लिए बनाता है, जब यह अपने कार्यक्रम के लिए आवश्यकता है, तब भी जब आप पोर्ट एक plattform लिए कार्यक्रम है जहाँ intहै उदाहरण के लिए 16 बिट अहस्ताक्षरित और इसलिए DWORDके लिए एक उपनाम होना चाहिए signed long

अमूर्त। अपने कार्यक्रम में, आप विभिन्न उद्देश्यों के लिए बहुत सारे पूर्णांक और फ्लोटिंग पॉइंट नंबरों का उपयोग कर सकते हैं। जैसे उपनाम बना कर SPEED, HEIGHT, TEMPERATURE, यह से उन जैसे में से एक को बदलने के लिए अपेक्षाकृत आसान है floatकरने के लिए doubleऔर अन्य लोगों को छोड़ के रूप में वे कर रहे हैं।


हालांकि इस सवाल का जवाब नहीं है ...
री मियासक

@ री, आप सही कह रहे हैं कि बारूद ने सवाल का जवाब नहीं दिया लेकिन वास्तव में इस पर टिप्पणी की। फिर भी, पी.एस.ई स्वरूपित या लंबी टिप्पणियों की अनुमति नहीं देता है ... मुझे लगता है कि वह एक मूल्य के लायक नहीं है: उनकी टिप्पणी विषय पर है और एक अच्छी है।
एंडो

@ और यह पूरी तरह से प्रश्न को पढ़ने के परिणामस्वरूप नहीं लगता है; पोर्टेबिलिटी पर नोट से अलग (जो अपडेस की सूची में डालने के लिए सिर्फ एक और आइटम है), यह सिर्फ एक प्रतिबंध है।
री मियासका

2

मैं मानता हूं कि एंड्रिया से आपको इनकैप्सुलेशन की जरूरत है, हालांकि मैं असहमत हूं कि यह महंगा होना चाहिए।

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

यानी मुख्य समस्या जो मुझे भाषा के साथ टाइप करने में आती है, वह वास्तव में एक नए प्रकार का परिचय नहीं है, बल्कि बस एक उपनाम है, जबकि यह उपयोगी है, यह एक नए प्रकार के रूप में उपयोगी नहीं है जो पुराने प्रकार की तरह है लेकिन एक नए के साथ नाम दें। और रचना या वंशानुक्रम बहुत भारी है यदि आप केवल यह सुनिश्चित करना चाहते हैं कि आप कुछ चर नहीं मिलाएँ।


1
मैं अधिक सहमत नहीं हो सका, मैं वास्तव में इस तरह के "सीमित" बहुरूपता को देखना चाहूंगा। यदि type Name = String, तब किसी Stringफ़ंक्शन से अपेक्षित नहीं किया जा सकता है Name, लेकिन रिवर्स संभव है।
मथिएउ एम।

1

मुझे लगता है कि टाइप एलियाज़ आलसी प्रोग्रामर (बहुत) सस्ते एनकैप्सुलेशन देते हैं। तो शायद विकल्प सिर्फ उचित (महंगे) इनकैप्सुलेशन का उपयोग करने के लिए हो सकता है।

यह भी तर्क है कि पूर्व भी मशीन / भाषा के लिए बाद के उपयोग की तुलना में बहुत अधिक अनुकूलित है, हालांकि।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.