मुझे संदेह है कि मैं इस प्रश्न पर एक नज़र डालने वाला नहीं हूं, लेकिन मैं एक बहुत अनुभवी प्रोग्रामर हूं, और मुझे आशा है कि कुछ अधिक खुले दिमाग वाले पाठक ध्यान देंगे।
मेरा मानना है कि यह वस्तु-उन्मुख प्रोग्रामिंग भाषाओं को उनके मूल्य-वापसी प्रक्रियाओं (वीआरपी) के लिए बेहतर बनाता है जो निर्धारक और शुद्ध हों।
'वीआरपी' एक फ़ंक्शन के लिए आधुनिक शैक्षणिक नाम है जिसे एक अभिव्यक्ति के हिस्से के रूप में कहा जाता है, और इसमें एक वापसी मूल्य होता है जो अभिव्यक्ति के मूल्यांकन के दौरान कॉल को प्रतिस्थापित करता है। जैसे कि एक स्टेटमेंट में, जैसे x = 1 + f(y)
फ़ंक्शन f
VRP के रूप में कार्य कर रहा है।
'नियतात्मक' का अर्थ है कि फ़ंक्शन का परिणाम केवल उसके मापदंडों के मूल्यों पर निर्भर करता है। यदि आप इसे फिर से उसी पैरामीटर मानों के साथ कहते हैं, तो आपको समान परिणाम प्राप्त होना निश्चित है।
'प्योर' का मतलब कोई साइड-इफेक्ट नहीं है: फ़ंक्शन को कॉल करने से परिणाम की गणना के अलावा कुछ भी नहीं होता है । इसका अर्थ व्यवहार में कोई महत्वपूर्ण दुष्प्रभाव नहीं हो सकता है , इसलिए यदि वीआरपी एक डिबगिंग संदेश को हर बार कॉल करता है, उदाहरण के लिए, जिसे शायद अनदेखा किया जा सकता है।
इस प्रकार, यदि, सी # में, अपने कार्य नहीं नियतात्मक और शुद्ध है, मैं कहता हूँ आप इसे एक बनाना चाहिए void
समारोह (दूसरे शब्दों में, नहीं एक VRP), और किसी भी कीमत यह वापसी करने की जरूरत है या तो एक में वापस आ जाना चाहिए out
या एक ref
पैरामीटर।
उदाहरण के लिए, यदि आपके पास डेटाबेस तालिका से कुछ पंक्तियों को हटाने का कोई कार्य है, और आप चाहते हैं कि यह हटाई गई पंक्तियों की संख्या लौटाए, तो आपको इसे कुछ इस तरह घोषित करना चाहिए:
public void DeleteBasketItems(BasketItemCategory category, out int count);
यदि आप कभी-कभी इस फ़ंक्शन को कॉल करना चाहते हैं count
, लेकिन नहीं मिलता है , तो आप हमेशा ओवरलोडिंग की घोषणा कर सकते हैं।
आप जानना चाह सकते हैं कि यह शैली ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को बेहतर क्यों बनाती है। मोटे तौर पर, यह प्रोग्रामिंग की एक शैली में फिट बैठता है, जो (थोड़ा असंभव) को 'प्रक्रियात्मक प्रोग्रामिंग' कहा जा सकता है, और यह एक प्रक्रियात्मक प्रोग्रामिंग शैली है जो ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग को बेहतर ढंग से फिट करता है।
क्यों? वस्तुओं का शास्त्रीय मॉडल यह है कि उनके पास गुण (उर्फ विशेषताएँ) हैं, और आप उन गुणों को पढ़ने और अद्यतन करने के माध्यम से वस्तु (मुख्य रूप से) को पूछताछ और हेरफेर करते हैं। एक प्रक्रियात्मक प्रोग्रामिंग शैली को ऐसा करना आसान हो जाता है, क्योंकि आप संपत्तियों को प्राप्त करने और सेट करने के बीच मनमाने ढंग से कोड निष्पादित कर सकते हैं।
प्रक्रियात्मक प्रोग्रामिंग का नकारात्मक पक्ष यह है कि, क्योंकि आप सभी जगह मनमाने कोड निष्पादित कर सकते हैं, आप वैश्विक चर और दुष्प्रभावों के माध्यम से कुछ बहुत ही अप्रिय और बग-कमजोर बातचीत प्राप्त कर सकते हैं।
इसलिए, बस, अपने कोड को पढ़ने वाले किसी व्यक्ति को यह संकेत देना अच्छा है कि एक फ़ंक्शन इसे गैर-मूल्य रिटर्न करके बना सकता है।