ठीक है, इसलिए शीर्षक थोड़ा clickbaity है, लेकिन गंभीरता से मैं एक बता रहा हूं, कुछ समय के लिए किक मत पूछो । मुझे यह पसंद है कि कैसे यह सही वस्तु उन्मुख फैशन में संदेशों के रूप में उपयोग किए जाने वाले तरीकों को प्रोत्साहित करता है । लेकिन यह एक मुश्किल समस्या है जो मेरे सिर के बारे में तेजस्वी है।
मुझे संदेह है कि लिखित कोड एक ही समय में ओओ सिद्धांतों और कार्यात्मक सिद्धांतों का पालन कर सकता है। मैं इन विचारों और बड़े चिपके हुए बिंदु को समेटने की कोशिश कर रहा हूं, जो कि मैं उतरा हूं return
।
एक शुद्ध कार्य के दो गुण होते हैं:
एक ही इनपुट के साथ इसे बार-बार कॉल करना हमेशा एक ही परिणाम देता है। इसका तात्पर्य है कि यह अपरिवर्तनीय है। इसका राज्य केवल एक बार निर्धारित होता है।
यह कोई साइड इफेक्ट नहीं पैदा करता है। इसे कॉल करने के कारण होने वाला एकमात्र परिवर्तन परिणाम उत्पन्न कर रहा है।
इसलिए, यदि आप return
परिणामों को संप्रेषित करने के तरीके के रूप में उपयोग करके शपथ लेते हैं, तो शुद्ध रूप से कार्यात्मक होने के बारे में कैसे जाना जाता है?
बताओ, मत पूछो कुछ क्या एक पक्ष प्रभाव पर विचार करेगा का उपयोग करके विचार काम करता है। जब मैं किसी वस्तु से निपटता हूं तो मैं इसकी आंतरिक स्थिति के बारे में नहीं पूछता। मैं इसे बताता हूं कि मुझे क्या करने की आवश्यकता है और यह अपनी आंतरिक स्थिति का उपयोग करके यह पता लगाने के लिए करता है कि मैंने इसे करने के लिए क्या किया है। एक बार जब मैं इसे बताता हूं तो मैं यह नहीं पूछता कि यह क्या किया। मैं बस यह उम्मीद करता हूं कि यह कुछ करने के लिए किया गया है जो इसे करने के लिए कहा गया था।
मुझे लगता है कि बताओ, क्या न पूछें केवल एनकैप्सुलेशन के लिए एक अलग नाम है। जब मैं उपयोग करता return
हूं तो मुझे पता नहीं होता कि मुझे क्या कहा जाता है। मैं इसे प्रोटोकॉल नहीं बोल सकता, मुझे अपने प्रोटोकॉल से निपटने के लिए मजबूर करना होगा। जो कई मामलों में आंतरिक स्थिति के रूप में व्यक्त किया जाता है। यहां तक कि अगर जो उजागर हुआ है वह बिल्कुल भी नहीं है, तो यह आमतौर पर राज्य और इनपुट आर्गों पर की गई कुछ गणना है। आंतरिक स्थिति या गणना की तुलना में कुछ अधिक सार्थक परिणामों की मालिश करने का मौका देता है। वह संदेश है । इस उदाहरण को देखें ।
दिन में वापस जाएं, जब डिस्क ड्राइव वास्तव में उनके पास डिस्क थी और एक अंगूठे ड्राइव था जो आपने कार में किया था जब आपकी उंगलियों के साथ स्पर्श करने के लिए पहिया बहुत ठंडा था, तो मुझे सिखाया गया था कि कैसे कष्टप्रद लोग उन कार्यों पर विचार करते हैं जिनके पास पैरामीटर हैं। void swap(int *first, int *second)
इतना आसान लग रहा था लेकिन हमें उन कार्यों को लिखने के लिए प्रोत्साहित किया गया था जो परिणाम लौटाते थे। इसलिए मैंने इसे विश्वास में लिया और इसका अनुसरण करना शुरू किया।
लेकिन अब मैं देख रहा हूं कि लोग वास्तुशिल्प का निर्माण कर रहे हैं, जहां वस्तुओं को उनके नियंत्रण का निर्माण कैसे किया जाता है जहां वे अपना परिणाम भेजते हैं। यहाँ एक उदाहरण कार्यान्वयन है । आउटपुट पोर्ट ऑब्जेक्ट को इंजेक्ट करना एक बार फिर से आउट पैरामीटर विचार जैसा लगता है। लेकिन यह है कि कैसे बताओ मत पूछो वस्तुओं अन्य वस्तुओं बताओ कि वे क्या किया है।
जब मैंने पहली बार साइड इफेक्ट के बारे में जाना तो मैंने इसे आउटपुट पैरामीटर की तरह सोचा। हमें बताया जा रहा था कि लोगों के आश्चर्यचकित करने वाले काम नहीं होने के कारण, कुछ काम आश्चर्यजनक तरीके से हो रहे हैं return result
। अब निश्चित रूप से, मुझे पता है कि समानांतर एसिंक्रोनस थ्रेडिंग मुद्दों का एक ढेर है जो साइड इफेक्ट्स के साथ टकराता है, लेकिन वापसी वास्तव में सिर्फ एक कन्वेंशन है जो आपने परिणाम को स्टैक पर धकेल दिया है, इसलिए जो भी आप इसे बाद में बंद कर सकते हैं। यह सब वास्तव में है।
मैं वास्तव में क्या पूछना चाहता हूँ:
क्या return
यह सब साइड इफेक्ट दुख से बचने और ताले के बिना धागा सुरक्षा प्राप्त करने का एकमात्र तरीका है, या क्या मैं बता सकता हूं, विशुद्ध रूप से कार्यात्मक तरीके से नहीं पूछें ?