व्यवहार Array.Resize
.NET में विधि के समान है । यह समझने के लिए कि .
सी, सी ++, जावा, सी #, और स्विफ्ट में टोकन के इतिहास को देखने के लिए क्या उपयोगी हो सकता है ।
सी में, एक संरचना चरों के एकत्रीकरण से ज्यादा कुछ नहीं है। .
संरचना प्रकार के एक चर पर लागू करना संरचना के भीतर संग्रहीत एक चर तक पहुंच जाएगा। ऑब्जेक्ट्स के पॉइंटर्स वेरिएबल्स के एकत्रीकरण को नहीं पकड़ते हैं , लेकिन उन्हें पहचानते हैं। यदि किसी के पास एक संकेतक है जो एक संरचना की पहचान करता है, तो ->
ऑपरेटर का उपयोग सूचक द्वारा पहचाने गए ढांचे के भीतर संग्रहीत चर तक पहुंचने के लिए किया जा सकता है।
सी ++ में, संरचनाएं और कक्षाएं न केवल एकत्रित चर बनाती हैं, बल्कि उन्हें कोड भी संलग्न कर सकती हैं। .
एक विधि का उपयोग करने के लिए एक चर पर होगा कि विधि चर की सामग्री पर ही काम करने के लिए पूछना ; ->
एक चर पर प्रयोग करना जो किसी वस्तु की पहचान करता है, उस विधि को चर द्वारा पहचानी गई वस्तु पर कार्य करने के लिए कहेगा ।
जावा में, सभी कस्टम वैरिएबल प्रकार केवल वस्तुओं की पहचान करते हैं, और एक वैरिएबल पर एक विधि को लागू करने से वह विधि बताएगी जो चर द्वारा ऑब्जेक्ट की पहचान की जाती है। चर सीधे किसी भी प्रकार के समग्र डेटा प्रकार को पकड़ नहीं सकते हैं, और न ही ऐसा कोई साधन है जिसके द्वारा कोई विधि किसी चर पर पहुंच सकती है जिस पर इसे लागू किया जाता है। ये प्रतिबंध, हालांकि शब्दार्थ सीमित हैं, रनटाइम को बहुत सरल करते हैं, और बायटेकोड सत्यापन की सुविधा प्रदान करते हैं; इस तरह के सरलीकरणों ने जावा के संसाधन ओवरहेड को कम कर दिया, जब बाजार ऐसे मुद्दों के प्रति संवेदनशील था, और इस तरह से बाजार में इसका लाभ हुआ। उनका यह भी मतलब था कि .
C या C ++ में इस्तेमाल किए गए समान के बराबर टोकन की कोई आवश्यकता नहीं है । हालाँकि जावा ->
C और C ++ की तरह ही इस्तेमाल किया जा सकता था , लेकिन रचनाकारों ने एकल-वर्ण का उपयोग करने का विकल्प चुना.
चूँकि किसी अन्य उद्देश्य के लिए इसकी आवश्यकता नहीं थी।
C # और अन्य .NET भाषाओं में, चर या तो वस्तुओं की पहचान कर सकते हैं या सीधे मिश्रित डेटा प्रकारों को पकड़ सकते हैं। जब एक समग्र डेटा प्रकार के चर पर उपयोग किया जाता है, तो चर .
की सामग्री पर कार्य करता है ; जब संदर्भ प्रकार के एक चर पर उपयोग किया जाता है, तो पहचान.
की गई वस्तु पर कार्य करता हैइसके द्वारा। कुछ प्रकार के संचालन के लिए, शब्दार्थ भेद विशेष रूप से महत्वपूर्ण नहीं है, लेकिन दूसरों के लिए यह है। सबसे अधिक समस्याग्रस्त स्थितियां वे हैं जिनमें एक समग्र डेटा प्रकार की विधि जो उस चर को संशोधित करती है जिस पर इसे लागू किया जाता है, को केवल-पढ़ने के लिए चर पर लाया जाता है। यदि रीड-ओनली वैल्यू या वैरिएबल पर किसी विधि को लागू करने का प्रयास किया जाता है, तो कंपाइलर्स आमतौर पर वैरिएबल की नकल करेंगे, विधि को उस पर कार्य करने देंगे, और वैरिएबल को त्याग देंगे। यह आम तौर पर उन तरीकों से सुरक्षित है जो केवल चर को पढ़ते हैं, लेकिन उन तरीकों से सुरक्षित नहीं हैं जो इसे लिखते हैं। दुर्भाग्य से, .does के पास अभी तक यह संकेत देने का कोई साधन नहीं है कि कौन से तरीकों का उपयोग ऐसे प्रतिस्थापन के साथ सुरक्षित रूप से किया जा सकता है और जो नहीं कर सकते।
स्विफ्ट में, समुच्चय के तरीके स्पष्ट रूप से इंगित कर सकते हैं कि क्या वे उस चर को संशोधित करेंगे, जिस पर वे आमंत्रित हैं, और कंपाइलर केवल-पढ़ी गई चर पर उत्परिवर्तन विधियों के उपयोग की मनाही करेगा (बजाय उन्हें परिवर्तनशील की अस्थायी प्रतियां म्यूट करने के बजाय जो तब होगा छूट जाना)। इस अंतर के कारण, .
उन कॉल विधियों को टोकन का उपयोग करना, जो उन चर को संशोधित करते हैं, जिन पर उन्हें लागू किया जाता है। .NET की तुलना में स्विफ्ट में अधिक सुरक्षित है। दुर्भाग्य से, तथ्य यह है कि एक ही .
टोकन का उपयोग उस उद्देश्य के लिए किया जाता है क्योंकि एक चर द्वारा पहचानी गई बाहरी वस्तु पर कार्य करने का मतलब है कि भ्रम की संभावना बनी हुई है।
अगर टाइम मशीन थी और C # और / या स्विफ्ट के निर्माण में वापस चली गई, तो कोई भी इस तरह के मुद्दों के आसपास के भ्रम से बहुत हद तक बच सकता था, क्योंकि भाषाओं का उपयोग .
और ->
टोकन C ++ उपयोग के बहुत करीब है। दोनों समुच्चय और संदर्भ प्रकारों के तरीके .
उस चर पर कार्य करने के लिए उपयोग कर सकते हैं जिस पर उन्हें आमंत्रित किया गया था, और ->
एक मूल्य (कंपोजिट के लिए) या इस तरह पहचानी गई चीज़ (संदर्भ प्रकार के लिए) पर कार्य करने के लिए। हालांकि, न तो भाषा को इस तरह से डिज़ाइन किया गया है।
C # में, एक वैरिएबल को संशोधित करने के लिए एक विधि के लिए सामान्य अभ्यास, जिस पर इसे लागू किया जाता है, चर ref
को एक विधि के पैरामीटर के रूप में पास करना है । इस प्रकार Array.Resize(ref someArray, 23);
जब someArray
20 तत्वों की एक सरणी की someArray
पहचान होती है, तो मूल सरणी को प्रभावित किए बिना, 23 तत्वों की एक नई सरणी की पहचान करने का कारण होगा । यह ref
स्पष्ट करता है कि विधि को उस चर को संशोधित करने की अपेक्षा की जानी चाहिए जिस पर इसे लागू किया गया है। कई मामलों में, स्थैतिक तरीकों का उपयोग किए बिना चर को संशोधित करने में सक्षम होना लाभप्रद है; स्विफ्ट पते का मतलब है कि .
वाक्य रचना का उपयोग करके । नुकसान यह है कि यह स्पष्ट करता है कि चर पर कौन से तरीके काम करते हैं और मान किन तरीकों से कार्य करते हैं।