2013-05-15 2 views
5

कई आधुनिक भाषाओं में const इंटरफेस और इरादे को स्पष्ट करने के साथ-साथ संकलक को अनुकूलित करने के कुछ अवसर प्रदान करने के लिए शुद्धता का उपयोग किया जाना चाहिए। डी में वास्तव में अपरिवर्तनीय डेटा की शानदार सुविधा है। const और immutable का उपयोग कैसे किया जाना चाहिए? मुझे लगता है कि const को स्थानीय तर्कों के लिए क्वालीफायर के रूप मेंपसंद करते हैं और स्थानीय चर के लिए immutable कोड लिखने का एक अच्छा तरीका प्रतीत होता है, लेकिन जैसे ही आप किसी संदर्भ या पॉइंटर जैसे डेटा सदस्य (निजी या नहीं) के साथ एक स्ट्रक्चर असाइन करना चाहते हैं। एक अपरिवर्तनीय चर के लिए आप ऐसा नहीं कर सकते हैं। अगर मैं अपरिवर्तनीय का उपयोगडी में 'कॉन्स्ट' और 'अपरिवर्तनीय' का उपयोग कब और कैसे किया जाना चाहिए?

struct S { 
    private int[] data; 
} 

void main() { 
    immutable s = new S; // won't work, since members aren't immutable 
} 

इसलिए, एक struct के कार्यान्वयन को बदलने मेरी कोड तोड़ सकते हैं,। क्या मुझे स्थानीय चर के लिए const पसंद करना चाहिए और केवल आवश्यक होने पर अपरिवर्तनीय उपयोग करना चाहिए? दिशानिर्देश क्या हैं?

उत्तर

6

आप बेहद भाग्यशाली हैं - प्रस्तुति के साथ DConf2013 से एक वीडियो इस विषय से वास्तव में समर्पित पिछले सप्ताह प्रकाशित किया गया है: http://youtu.be/mPr2UspS0fE

आपके मामले में, auto s = new immutable(S)(); चाल करना चाहिए। फिर आप कन्स्ट्रक्टर में डेटा स्लाइस पॉइंट बना सकते हैं। हालांकि, अगर यह टुकड़ा को डेटा इंगित कर सकता है, तो एस संभवतः अपरिवर्तनीय नहीं हो सकता है, क्योंकि const और immutable डी में संक्रमणीय हैं - वे न केवल परिवर्तनीय के बारे में बहुत मजबूत गारंटी प्रदान करते हैं बल्कि किसी भी डेटा के बारे में भी हो सकते हैं संदर्भ/सूचक के माध्यम से अप्रत्यक्ष रूप से इसका उपयोग किया गया।

यह वास्तव में लिंक किए गए वीडियो में शामिल है, लेकिन संक्षिप्त सारांश यह है कि आप वास्तव में इरादा रखते समय अपरिवर्तनीय उपयोग करना चाहते हैं। दूसरे शब्दों में, जब आप S कार्यान्वयन में परिवर्तन करने के लिए अपना कोड तोड़ने के लिए चाहते हैं ताकि अपरिवर्तनीय गारंटी अब मान्य न हो।

संबंधित मुद्दे