शुद्ध कार्यों के साथ काम करना बहुत कम तनावपूर्ण हो सकता है, क्योंकि आप उनका आसानी से परीक्षण कर सकते हैं और अधिक आत्मविश्वास के साथ उनके बारे में तर्क कर सकते हैं।
शुद्ध कार्य वे कार्य हैं जो दुष्प्रभाव उत्पन्न नहीं करते हैं और जब समान इनपुट पैरामीटर के साथ कॉल किया जाता है, तो हमेशा वही आउटपुट लौटाएगा।
आप यह सुनिश्चित करने के लिए शुद्ध कार्यों का उपयोग कर सकते हैं कि आपका कोड साफ, रखरखाव योग्य और परीक्षण योग्य है। ये कार्य इन कार्यों के लिए आदर्श हैं क्योंकि वे अनुमानित हैं और बाहरी राज्यों को संशोधित नहीं करते हैं।
उन्हें डिबग करना भी आसान होता है, जिससे वे जटिल सॉफ्टवेयर सिस्टम विकसित करने में सहायक होते हैं। यहां आप जावास्क्रिप्ट में शुद्ध कार्यों, उनकी विशेषताओं और उनके फायदों के बारे में जानेंगे।
एक शुद्ध कार्य के लक्षण
के लिए एक समारोह "शुद्ध" होने के लिए, इसे कुछ आवश्यकताओं को पूरा करना होगा।
लगातार वापसी मूल्य
एक शुद्ध फ़ंक्शन को हमेशा समान इनपुट दिए जाने पर समान मान लौटाना चाहिए, भले ही इसे कितनी बार कहा जाए।
उदाहरण के लिए, नीचे दिए गए फ़ंक्शन पर विचार करें:
समारोहगुणा(ए, बी) {
वापस करना ए * बी;
}
गुणा ऊपर दिए गए उदाहरण में फ़ंक्शन हमेशा अपने दो तर्कों का गुणनफल लौटाएगा। तर्कों के समान सेट को देखते हुए, इसका निरंतर रिटर्न मान होता है।
एक ही तर्क के साथ इस फ़ंक्शन को कई बार कॉल करने पर हर बार एक ही आउटपुट मिलेगा। उदाहरण के लिए:
गुणा करें (2, 3); // रिटर्न 6
गुणा करें (2, 3); // रिटर्न 6
गुणा करें (2, 3); // रिटर्न 6
वैकल्पिक रूप से, नीचे दिए गए उदाहरण पर विचार करें:
समारोहगुणायादृच्छिक संख्या(अंक) {
वापस करना संख्या * गणित।ज़मीन(गणित।अनियमित() * 10);
}
गुणायादृच्छिकसंख्या(5); // अप्रत्याशित परिणाम
गुणायादृच्छिकसंख्या(5); // अप्रत्याशित परिणाम
गुणायादृच्छिकसंख्या(5); // अप्रत्याशित परिणाम
गुणायादृच्छिक संख्या हर बार जब आप इसे कॉल करते हैं तो उपरोक्त कार्य अलग-अलग परिणाम देता है, जिससे यह अशुद्ध हो जाता है। इस फ़ंक्शन के परिणाम अप्रत्याशित हैं, इसलिए इस पर भरोसा करने वाले घटकों का परीक्षण करना कठिन है।
कोई दुष्प्रभाव नहीं
एक शुद्ध कार्य किसी भी दुष्प्रभाव का उत्पादन नहीं करना चाहिए। एक साइड इफेक्ट फ़ंक्शन के दायरे से बाहर राज्य या व्यवहार के किसी भी संशोधन को संदर्भित करता है, जैसे कि वैश्विक चर, कंसोल आउटपुट, नेटवर्क अनुरोध या डोम हेरफेर को संशोधित करना।
जब एक शुद्ध कार्य का एक साइड इफेक्ट होता है, तो यह अब शुद्ध नहीं होता है क्योंकि यह बाहरी स्थिति को प्रभावित करता है और बिना देखे जाने वाले साइड इफेक्ट के सिद्धांत का उल्लंघन करता है। इसलिए, शुद्ध कार्य यह सुनिश्चित करने के लिए साइड इफेक्ट से बचते हैं कि वे कार्यक्रम की स्थिति को नहीं बदलते हैं।
उदाहरण के लिए, नीचे दिए गए उदाहरण पर विचार करें:
होने देना गिनती = 0;
समारोहवेतन वृद्धि() {
गिनती ++;
सांत्वना देनालॉग (गिनती);
}
वेतन वृद्धि (); // लॉग 1
वेतन वृद्धि (); // लॉग 2
वेतन वृद्धि (); // लॉग 3
वेतन वृद्धि इस उदाहरण में फ़ंक्शन को संशोधित करने का दुष्प्रभाव है गिनती करना इसके दायरे से बाहर चर। यह कंसोल पर भी लॉग इन करता है।
यह कार्य शुद्ध नहीं है क्योंकि इसका एक साइड इफेक्ट है, जिससे इसके आउटपुट की भविष्यवाणी करना और अलगाव में परीक्षण करना कठिन हो सकता है। इसे शुद्ध बनाने के लिए, आप इसमें लेने के लिए इसे संशोधित कर सकते हैं गिनती करना एक तर्क के रूप में चर और किसी भी बाहरी स्थिति को संशोधित किए बिना बढ़ा हुआ मान वापस करें।
जैसे इतना:
समारोहवेतन वृद्धि(गिनती करना) {
वापस करना गिनती + 1;
}
वृद्धि (1); // रिटर्न 2
वृद्धि (1); // रिटर्न 2
वृद्धि (1); // रिटर्न 2
का संस्करण वेतन वृद्धि उपरोक्त उदाहरण में दिए गए फ़ंक्शन का कोई साइड इफेक्ट नहीं है क्योंकि यह किसी बाहरी चर को संशोधित नहीं करता है या किसी मान को लॉग नहीं करता है। इसके अतिरिक्त, चाहे आप इसे कितनी भी बार कॉल करें, यह समान इनपुट के लिए समान मान लौटाता है। इसलिए, यह एक शुद्ध कार्य है।
अन्य विशेषताएँ
एक स्थिर वापसी मूल्य होने और किसी भी दुष्प्रभाव का उत्पादन नहीं करने के अलावा, आपको निम्नलिखित नियमों का पालन करना चाहिए एक जावास्क्रिप्ट फ़ंक्शन बनाना कि तुम शुद्ध होना चाहते हो:
- आपके कार्य को इसके किसी भी तर्क को संशोधित नहीं करना चाहिए। इसके बजाय, यदि किसी ऑपरेशन में म्यूटेशन की आवश्यकता होती है, तो तर्क की एक कॉपी बनाएं और कॉपी को म्यूट करें।
- आपके फ़ंक्शन का हमेशा वापसी मान होना चाहिए। यदि आपके फ़ंक्शन का रिटर्न वैल्यू या कोई साइड इफेक्ट नहीं है, तो यह कुछ भी नहीं कर सकता है!
- आपका कार्य किसी बाहरी स्थिति पर निर्भर नहीं होना चाहिए।
शुद्ध कार्यों के लाभ
अशुद्ध कार्यों पर शुद्ध कार्यों के कुछ लाभ हैं, जिनमें से कुछ में निम्नलिखित शामिल हैं।
परीक्षण योग्यता
शुद्ध कार्यों का परीक्षण करना आसान होता है क्योंकि उनका इनपुट/आउटपुट व्यवहार अच्छी तरह से परिभाषित होता है। साथ ही, शुद्ध कार्य बाहरी स्थिति या दुष्प्रभावों पर निर्भर नहीं होते हैं। इसलिए, आप किसी भी निर्भरता या कार्यक्रम के अन्य भागों के साथ बातचीत के बारे में चिंता किए बिना अलगाव में उनका परीक्षण कर सकते हैं।
इसके विपरीत, बाहरी स्थिति पर निर्भर या दुष्प्रभाव उत्पन्न करने वाले अशुद्ध कार्यों का परीक्षण करना अधिक चुनौतीपूर्ण हो सकता है क्योंकि उनका व्यवहार कार्यक्रम की स्थिति या अन्य बाहरी कारकों पर निर्भर हो सकता है। यह व्यापक परीक्षण मामलों को बनाना कठिन बना सकता है और यह सुनिश्चित कर सकता है कि फ़ंक्शन सभी परिदृश्यों में सही ढंग से व्यवहार करता है।
संस्मरण
क्योंकि शुद्ध कार्य हमेशा एक ही इनपुट के लिए एक ही आउटपुट उत्पन्न करते हैं और कोई दुष्प्रभाव उत्पन्न नहीं करते हैं, आप उन्हें आसानी से याद कर सकते हैं।
इन गुणों पर भरोसा करके और मेमोइज़ेशन का उपयोग करके, आप किसी विशिष्ट इनपुट के लिए शुद्ध फ़ंक्शन कॉल के परिणाम को कैश कर सकते हैं। अगली बार उसी इनपुट के साथ कॉल किए जाने पर आपका फ़ंक्शन कैश किए गए परिणाम को वापस कर सकता है।
शुद्ध कार्यों को याद करना कार्यक्रम के प्रदर्शन में सुधार कर सकते हैं, विशेष रूप से महंगी संगणनाओं के लिए जो बार-बार एक ही इनपुट से निपटते हैं, कार्यक्रम की स्थिति में हस्तक्षेप के बारे में चिंता किए बिना।
इसके विपरीत, अशुद्ध कार्य एक ही इनपुट के लिए अलग-अलग परिणाम उत्पन्न कर सकते हैं, जो प्रोग्राम की स्थिति या बाहरी कारकों पर निर्भर करता है। इससे उन्हें याद रखना चुनौतीपूर्ण हो जाता है क्योंकि यदि फ़ंक्शन की निर्भरता या बाहरी स्थिति कॉल के बीच बदलती है तो कैश्ड परिणाम अब मान्य नहीं हो सकता है।
संगामिति
चूंकि शुद्ध कार्य किसी बाहरी स्थिति को संशोधित नहीं करते हैं या कोई दुष्प्रभाव उत्पन्न नहीं करते हैं, वे थ्रेड-सुरक्षित हैं। आप दौड़ स्थितियों या तुल्यकालन समस्याओं के बारे में चिंता किए बिना उन्हें समवर्ती रूप से चला सकते हैं।
इसके विपरीत, अशुद्ध कार्यों को समवर्ती रूप से निष्पादित करना चुनौतीपूर्ण हो सकता है क्योंकि समानांतर में निष्पादित होने पर वे एक दूसरे के साथ हस्तक्षेप कर सकते हैं या अप्रत्याशित व्यवहार उत्पन्न कर सकते हैं। उदाहरण के लिए, यदि दो थ्रेड्स एक ही वैश्विक चर को एक्सेस और संशोधित करते हैं, तो वे एक दूसरे के परिवर्तनों को अधिलेखित कर सकते हैं या असंगत परिणाम उत्पन्न कर सकते हैं।
शुद्ध कार्य बनाम। अशुद्ध कार्य
आप शुद्ध और अशुद्ध कार्यों के संयोजन का उपयोग करके प्रोग्राम लिख सकते हैं, क्योंकि प्रत्येक प्रकार के अपने उपयोग होते हैं।
शुद्ध कार्यों को अनुकूलित करना, परीक्षण करना और समानांतर बनाना आसान है, जिससे वे कार्यात्मक प्रोग्रामिंग, कैशिंग, परीक्षण, समानांतर प्रोग्रामिंग और डेटा प्रोसेसिंग कार्यों जैसे उपयोग के मामलों के लिए उपयुक्त हो जाते हैं।
हालाँकि, अशुद्ध कार्य परीक्षण और समरूपता में चुनौतियां पैदा करते हैं लेकिन परिवर्तनशील डेटा संरचनाओं के साथ काम करते समय या बाहरी प्रणालियों और संसाधनों के साथ बातचीत करते समय सहायक होते हैं।