2009-05-01 8 views
6

जैसा कि मैंने हमेशा इसे समझा, कार्यक्रम राज्य में कोई भी परिवर्तन (या आईओ के साथ कुछ भी करने के लिए) एक दुष्प्रभाव है। इससे कोई फर्क नहीं पड़ता कि क्या वैश्विक वैरिएबल में या वस्तु के निजी क्षेत्र में परिवर्तन होता है, जिस पर विधि को बुलाया जाता है। यह इस प्रकार है कि सभी विधियां जो कुछ भी वापस नहीं करती हैं या तो कुछ भी नहीं करती हैं या साइड इफेक्ट नहीं होती हैं।
मेरा भ्रम हमारे विश्वविद्यालय के प्रशिक्षकों में से एक है (जो अभी भी एक छात्र है और इस प्रकार सर्वज्ञानी नहीं है;)) मुझे बताते हुए कि सेटर्स के दुष्प्रभाव नहीं हैं।जब किसी विधि के साइड इफेक्ट्स होते हैं?

उत्तर

6

आपका प्रशिक्षक गलत है।

http://en.wikipedia.org/wiki/Side_effect_(computer_science)

पैसे उद्धरण # 1::

कंप्यूटर विज्ञान में, एक समारोह या अभिव्यक्ति अतः संपादकों के लिए क्षमा याचना यहाँ पूरा लेख चिपकाने नहीं करने के लिए के साथ, इस विकिपीडिया क्या कहना है कहा जाता है कि यदि कोई मूल्य बनाने के अलावा, यह कुछ राज्य को संशोधित करता है या कॉलिंग फ़ंक्शंस या बाहरी दुनिया के साथ एक अवलोकन करने योग्य बातचीत करता है, तो इसका दुष्प्रभाव होता है।

पैसे उद्धरण # 2:

साइड इफेक्ट की उपस्थिति में, एक कार्यक्रम के व्यवहार अतीत के इतिहास पर निर्भर करता है; अर्थात, मूल्यांकन मामलों का आदेश है।

गैर-एनओपी सेटर्स हमेशा मानदंडों को पूरा करते हैं।

-1

गेटर्स और सेटर्स get_ और set_ विधियों के लिए सिंटैक्टिक चीनी हैं। वे बिल्कुल साइड इफेक्ट्स कर सकते हैं (हालांकि संभवतः यह बहुत बुरा विचार है कि सभी कॉलर चाहता था कि काउंटर या कुछ बढ़ाना था)।

0

सबसे पहले: मुझे भाषा अज्ञात टैग के बारे में पता है! "रनको" ने सवाल का जवाब सही ढंग से दिया। लेकिन अक्सर आप अपने ज्ञान को असली दुनिया में लागू करना चाहते हैं, इसलिए मुझे लगता है कि मुझे यह भी जवाब देना अच्छा लगेगा कि इस समस्या को और अधिक व्यावहारिक तरीके से संबोधित किया जाए।

सी ++, सी # या जावा जैसी असली दुनिया की भाषाओं से निपटने के दौरान, फिर भी एक एनओपी फ़ंक्शन में वास्तविक दुष्प्रभाव होते हैं जो कोड को निष्पादित कर सकते हैं!

बस स्थिर-रचनाकारों के बारे में सोचें। भले ही चश्मा हमेशा एक निर्दिष्ट समय निर्दिष्ट नहीं करते हैं कि एक वर्ग के लिए एक स्थिर कन्स्ट्रक्टर चलाया जाता है, ज्यादातर समय यह उस समय का बिंदु होगा जहां कक्षा के किसी विधि या सदस्य को पहली बार एक्सेस किया जाता है। सी # में

उदाहरण:

class NotSoObvious 
{ 
    static NotSoObvious() 
    { 
     CauseSomeSideEffects(); 
    } 

    // calling this can cause the constructor to run first! 
    public static void DoNothing() 
    { 
     return; 
    } 
} 

इतना ही नहीं है कि यहां तक ​​कि एक विधि है कि सभी को नहीं बुलाया जा रहा है दुष्प्रभाव हो सकते हैं कर रहा है! प्रतिबिंब के बारे में सोचें (किसी प्रोग्राम की अपनी संरचना के बारे में जानकारी पूछने की क्षमता)। जब कोई विधि मौजूद होती है लेकिन इसे नहीं कहा जा रहा है, तो इसे प्रतिबिंब द्वारा अभी भी पता लगाया जा सकता है।

किसी विधि के साथ कोई विधि निश्चित रूप से उस प्रोग्राम पर दुष्प्रभाव नहीं डालती है जो अंदर की विधियों की संख्या को आउटपुट करती है!

यह सब इस पर उबाल जाता है: यदि आप किसी विधि के वास्तविक दुष्प्रभावों के बारे में जानना चाहते हैं, तो आपको सबसे पहले यह निर्धारित करना होगा कि आप "दुष्प्रभाव" के रूप में क्या मानते हैं।

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