संकेत पर संदर्भों का सबसे बड़ा लाभ अधिक सादगी और पठनीयता है। हमेशा की तरह जब आप कुछ सरल करते हैं तो आप इसे उपयोग करना आसान बनाते हैं लेकिन लचीलेपन और नियंत्रण की कीमत पर आपको निम्न-स्तरीय सामान (जैसा कि अन्य लोगों ने उल्लेख किया है) के साथ मिलता है।
पॉइंटर्स की अक्सर 'बदसूरत' होने के लिए आलोचना की जाती है।
class* myClass = new class();
अब हर बार जब आप इसका उपयोग करते हैं तो आपको इसे पहले या तो इसे रोकना पड़ता है
myClass->Method() or (*myClass).Method()
कुछ पठनीयता खोने और जटिलता को जोड़ने के बावजूद, लोगों को अभी भी पॉइंटर्स को अक्सर मापदंडों के रूप में उपयोग करने की आवश्यकता होती है ताकि आप वास्तविक वस्तु को संशोधित कर सकें (मूल्य से गुजरने के बजाय) और विशाल वस्तुओं को कॉपी न करने के प्रदर्शन लाभ के लिए।
मेरे लिए यही कारण है कि बिंदुओं के समान लाभ प्रदान करने के लिए संदर्भों को पहले स्थान पर 'जन्म' दिया गया था, लेकिन सभी के बिना सूचक सिंटैक्स। अब आप वास्तविक वस्तु को पारित कर सकते हैं (केवल इसके मूल्य को नहीं) और आपके पास वस्तु के साथ बातचीत करने का एक अधिक पठनीय, सामान्य तरीका है।
MyMethod(&type parameter)
{
parameter.DoThis()
parameter.DoThat()
}
C ++ के संदर्भ C # / Java संदर्भों से भिन्न होते हैं, जिसमें एक बार जब आप इसे मान देते हैं कि यह था, तो आप इसे फिर से असाइन नहीं कर सकते थे (और जब यह घोषित किया गया था तो इसे सौंपा जाना है)। यह एक कास्ट पॉइंटर (एक ऐसा पॉइंटर जो किसी अन्य ऑब्जेक्ट पर दोबारा इंगित नहीं किया जा सकता था) का उपयोग करने के समान था।
जावा और सी # बहुत उच्च स्तर की हैं, आधुनिक भाषाएं जो पिछले वर्षों में C / C ++ में जमा हुई बहुत सारी गंदगी को साफ करती थीं और संकेत निश्चित रूप से उन चीजों में से एक थीं, जिन्हें 'साफ' करने की आवश्यकता थी।
जहां तक आपकी बात जानने वाले संकेत के बारे में आपकी टिप्पणी आपको एक मजबूत प्रोग्रामर बनाती है, यह ज्यादातर मामलों में सच है। यदि आप जानते हैं कि 'कैसे' कुछ काम करता है, तो यह जानने के बिना कि मैं इसका उपयोग कर सकता हूं, यह कहकर कि यह आपको बढ़त दे सकता है। एक किनारे का कितना हिस्सा हमेशा अलग होगा। आखिरकार, बिना यह जाने कि इसे कैसे लागू किया जाता है, OOP और इंटरफेसेस की कई सुंदरियों में से एक है।
इस विशिष्ट उदाहरण में, पॉइंटर्स के बारे में जानने से आपको संदर्भों में मदद मिलेगी? यह समझना कि सी # संदर्भ स्वयं वस्तु नहीं है, लेकिन वस्तु की ओर इशारा एक बहुत महत्वपूर्ण अवधारणा है।
# 1: आप वैल्यू से नहीं गुजर रहे हैं।
शुरुआत के लिए अच्छी तरह से जब आप एक पॉइंटर का उपयोग करते हैं, तो आप जानते हैं कि पॉइंटर केवल एक पता रखता है, बस। चर ही लगभग खाली है और यही कारण है कि तर्कों के रूप में पारित करना बहुत अच्छा है। प्रदर्शन लाभ के अलावा, आप वास्तविक वस्तु के साथ काम कर रहे हैं ताकि आपके द्वारा किए गए कोई भी परिवर्तन अस्थायी न हों
# 2: बहुरूपता / इंटरफेस
जब आपके पास एक संदर्भ होता है जो एक इंटरफ़ेस प्रकार होता है और यह किसी ऑब्जेक्ट की ओर इशारा करता है, तो आप केवल उस इंटरफ़ेस के तरीकों को कॉल कर सकते हैं, भले ही ऑब्जेक्ट में कई और क्षमताएं हों। ऑब्जेक्ट अलग-अलग तरीकों से भी लागू हो सकते हैं।
यदि आप इन अवधारणाओं को अच्छी तरह से समझते हैं तो मुझे नहीं लगता कि आप उपयोग किए गए पॉइंटर्स नहीं होने से बहुत अधिक गायब हैं। C ++ को अक्सर प्रोग्रामिंग सीखने के लिए एक भाषा के रूप में उपयोग किया जाता है क्योंकि यह आपके हाथों को कभी-कभी गंदा करने के लिए अच्छा है। इसके अलावा, निचले स्तर के पहलुओं के साथ काम करना आपको एक आधुनिक भाषा के आराम की सराहना करता है। मैंने C ++ से शुरुआत की और अब मैं एक C # प्रोग्रामर हूं और मुझे ऐसा लगता है कि कच्चे पॉइंटर्स के साथ काम करने से मुझे हुड के नीचे क्या होता है, इस पर बेहतर समझ है।
मुझे नहीं लगता कि सभी के लिए संकेत के साथ शुरू करना आवश्यक है, लेकिन यह महत्वपूर्ण है कि वे समझते हैं कि मूल्य-प्रकारों के बजाय संदर्भ का उपयोग क्यों किया जाता है और समझने का सबसे अच्छा तरीका यह है कि इसके पूर्वज, सूचक को देखें।