कार्यों (कथनों) के निष्पादन से अलग मूल्यों (भावों) की गणना रखना एक अच्छा विचार है । हम इस बात पर सटीक नियंत्रण चाहते हैं कि कहां और कब कार्रवाई की जाएगी (जैसे संदेश प्रदर्शित करना), लेकिन मूल्यों की गणना करते समय हम अधिक सार स्तर पर काम करेंगे और उन मूल्यों की गणना कैसे की जाए , इसकी परवाह नहीं करनी चाहिए ।
एक फ़ंक्शन जो केवल रिटर्न मान की गणना करता है, केवल उसके द्वारा दिए गए तर्कों का उपयोग करके, शुद्ध कहा जाता है ।
एक "फ़ंक्शन" जो एक क्रिया करता है वास्तव में एक प्रक्रिया है , जिसका प्रभाव होता है ।
किसी मूल्य की गणना के दौरान होने वाले किसी भी प्रभाव को साइड-इफेक्ट कहा जाता है , और जहां संभव हो उनसे बचना बेहतर होता है ("मुझे बस उस स्ट्रिंग की आवश्यकता थी, मुझे नहीं पता था कि यह डेटाबेस को हथौड़ा देगा!")।
साइड-इफ़ेक्ट की संभावना को कम करने के लिए, हमें अपनी प्रक्रियाओं में बहुत अधिक डेटा भेजने या उनमें कोई गणना करने से बचना चाहिए; यदि कुछ गणना पहले से करने की आवश्यकता है, तो आमतौर पर इसे शुद्ध रूप से अलग से करना बेहतर है, फिर प्रक्रिया के लिए केवल आवश्यक परिणाम पास करें। यह प्रक्रिया के उद्देश्य को स्पष्ट रखता है, और इस संभावना को कम कर देता है कि इसे बाद में गणना के भाग के रूप में उपयोग किया जाएगा (शुद्ध फ़ंक्शन को इसके बजाय फिर से उपयोग किया जा सकता है)।
उसी कारण से, हमें एक प्रक्रिया के अंदर प्रसंस्करण परिणामों से बचना चाहिए। परिणाम (यदि कोई है) हमारी कार्रवाई को वापस करना बेहतर है, और शुद्ध कार्यों के साथ किसी भी बाद के प्रसंस्करण को करना बेहतर है।
यदि हम इन नियमों का पालन करते हैं, तो हम एक प्रक्रिया की तरह समाप्त हो सकते हैं sayHello
, जिसमें किसी भी डेटा की आवश्यकता नहीं होती है और इसका परिणाम नहीं होता है। इसलिए इसके लिए सबसे अच्छा इंटरफ़ेस कोई तर्क नहीं है और एक मूल्य वापस नहीं करना है। उदाहरण के लिए, कुछ गणना के बीच में "कंसोल.लॉग" को कॉल करना बेहतर होता है।
गणना के दौरान प्रभावों की आवश्यकता को कम करने के लिए, हमारे पास गणना हो सकती है जो प्रक्रियाओं को वापस करती है ; जैसे। अगर हमें कार्रवाई करने के बारे में निर्णय लेने की आवश्यकता है, तो हमारे पास एक शुद्ध कार्य हो सकता है जो एक प्रक्रिया चुन सकता है और इसे वापस कर सकता है, बजाय इसे सीधे निष्पादित करने के।
इसी तरह, प्रक्रियाओं के दौरान गणना की आवश्यकता को कम करने के लिए, हम प्रक्रियाओं को अन्य प्रक्रियाओं को पैरामीटर के रूप में ले सकते हैं (संभवतः एक फ़ंक्शन का परिणाम); जैसे। प्रक्रियाओं की एक सरणी लेने और एक के बाद एक चल रहा है।