2010-05-07 8 views
22

क्या निम्न विधि शुद्ध है? मैं ऐसा कहूंगा, क्योंकि यह किसी भी तरह से मौजूदा वर्ग में नहीं बदलता है, इस प्रकार, इस विधि को चलाने से पहले, अब हम सब कुछ कक्षा में "देखें" कर सकते हैं, फिर भी वही होगा। क्या मैं सही हूँ?[शुद्ध] विधियों के बारे में प्रश्न

class Set { 
    ... 
    public ISet<T> UnionWith(ISet<T> set) { 
     ISet<T> unionSet = ... 

     foreach (Element element in this) { 
      unionSet.Add(element); 
     } 

     foreach (Element element in set) { 
      unionSet.Add(element); 
     } 

     return unionSet; 
    } 
} 
+0

शायद आप * idempotent * शब्द की तलाश में हैं? –

+0

हमम ... वास्तव में नहीं। –

+0

ध्यान दें कि (अवधारणात्मक रूप से) एक समारोह शुद्ध होने पर सोचते समय अपने अवशोषण के स्तर पर विचार करना महत्वपूर्ण है। यह वास्तव में शुद्ध वस्तु-वार है, क्योंकि यह किसी भी मौजूदा वस्तु (नए को छोड़कर) की स्थिति को नहीं बदलता है, लेकिन यह शुद्ध प्रणाली-वार नहीं है - यह स्मृति आवंटित करता है, इसलिए यह सिस्टम की स्थिति को बदल देता है। – Kos

उत्तर

31

आप System.Diagnostics.Contracts से Pure विशेषता के साथ लेबल मतलब [Pure] से हैं, तो प्रलेखन कहते हैं:

शुद्ध तरीकों कोई दिखाई राज्य परिवर्तन नहीं करते हैं।

चूंकि आपकी विधि कोई दृश्यमान स्थिति नहीं बदलती है (यानी कोई साइड इफेक्ट नहीं), यह [Pure] विशेषता के लिए अर्हता प्राप्त करेगा।

+1

क्या "शुद्ध" की कोई परिभाषा है जिसके लिए उसकी विधि अनुरूप नहीं है, वैसे भी? जहां तक ​​मैं देख सकता हूं, यह गणितीय रूप से शुद्ध भी है - यह हमेशा एक ही इनपुट ('यह' इनपुट के रूप में गिनती) के समान उत्पादन का उत्पादन करेगा, और यह किसी भी तरह से समग्र प्रणाली की स्थिति को नहीं बदलेगा। –

+1

पावेल: "शुद्ध" की कुछ परिभाषाओं की आवश्यकता है कि इनपुट अपरिवर्तनीय हो। एक रैपर फ़ंक्शन पर विचार करें जो एक शुद्ध फ़ंक्शन को याद करता है यदि यह शुद्ध है। यदि सेट इसके बारे में जानने वाले रैपर के बिना बदल सकता है, तो आप कह सकते हैं कि यूनियनविथ एक रैपर के साथ याद रखने के लिए "पर्याप्त शुद्ध" नहीं है। – Gabe

+0

इस समय मैंने सही सवाल उठाया था कि सी # कोड संहिता से अलग शुद्ध परिभाषा का उपयोग करके यह कुछ जवाब था। लेकिन इसके लेखक ने बाद में इसे हटा दिया। विचार यह था कि यदि अलग-अलग समय में आप मेरी कक्षा में एक ही आईएसईटी पास करते हैं, क्योंकि मेरी कक्षा के तत्व अलग-अलग समय पर भिन्न हो सकते हैं, तो आपको अलग-अलग आउटपुट मिलते हैं, इसलिए आपका कार्य शुद्ध नहीं है। http://en.wikipedia.org/wiki/Pure_function –