आज () एक अशुद्ध कार्य है क्योंकि इसका परिणाम उस चीज पर निर्भर है जो आप इसे नहीं देते हैं; विशेष रूप से, वर्तमान प्रणाली का समय। इसलिए, इसका परिणाम नियतात्मक नहीं है जब केवल आह्वान पर प्रदान किए गए इनपुट के आधार पर।
एक शुद्ध कार्य होगा int Add(int a, int b) {return a + b;}
। फ़ंक्शन पूरी तरह से काम करता है जो इसे दिया गया है, और कोई अन्य बाहरी राज्य डेटा का उपयोग नहीं करता है। इसका स्वाभाविक परिणाम यह है कि आप Add(2,2)
समय के अंत तक अब से 4 प्राप्त कर सकते हैं। इसके अलावा, क्योंकि फ़ंक्शन किसी भी बाहरी स्थिति को नहीं बदलता है (इसका कोई "साइड इफेक्ट्स" नहीं है), जोड़ें () आईएनजी 2 और 2 अब से तब तक जब तक सिस्टम में कुछ और नहीं बदलेगा, जब तक आप तब तक फ़ंक्शन के परिणाम को एक चर पर असाइन करें या अन्यथा अद्यतन स्थिति के लिए मान का उपयोग करें (जो कि फ़ंक्शन द्वारा स्वयं निष्पादित कोई ऑपरेशन नहीं है)। वस्तुतः सभी शास्त्रीय गणितीय कार्य शुद्ध कार्य हैं और इन्हें इस तरह लागू किया जा सकता है।
दूसरी ओर आज (), एक पंक्ति में दो बार कॉल करने पर समान मूल्य का उत्पादन कर सकता है , लेकिन अगर कई दिनों तक बार-बार नहीं बुलाया जाता है। ऐसा इसलिए है क्योंकि यह बाहरी राज्य डेटा पर निर्भर है जो आपके द्वारा फ़ंक्शन के पैरामीटर के रूप में प्रदान नहीं किया जाता है। नतीजतन, यह असंभव है, आज () समारोह के परिणाम को नियंत्रित करने के लिए कार्यक्रम की सीमाओं के भीतर। यह किसी दिए गए दिन पर दिए गए मूल्य का उत्पादन करेगा, और कभी भी किसी अन्य दिन उस मूल्य का उत्पादन नहीं करेगा, जब तक कि आप उस कंप्यूटर की सिस्टम घड़ी को नहीं बदलते हैं, जिस पर इसे चलाया जाता है (आमतौर पर कार्यक्रम की सीमाओं के बाहर होने वाला परिवर्तन)।
एक अशुद्ध कार्य जरूरी एक बुरी चीज नहीं है; प्रोग्राम की सीमाओं के बाहर किसी भी चीज़ के साथ बातचीत करने के लिए कार्यात्मक भाषाओं में भी अशुद्ध कार्यों की आवश्यकता होती है, जैसे डेटा स्टोर, संचार पाइपलाइन, यूआई डिस्प्ले, परिधीय उपकरण, आदि। एक प्रोग्राम जो इन चीजों में से कुछ भी नहीं करता है, वह एक प्रोग्राम है। जो इसकी उपयोगिता में तेजी से सीमित है; मैं यहां तक कि इस तरह के एक कार्यक्रम को तुच्छ कहूंगा, जैसा कि इनपुट या किसी भी एवेन्यू को स्वीकार करने के लिए बिना इसके उत्पादन के बारे में आपको सूचित करने के लिए, यह कुछ भी नहीं कर सकता है। कार्यात्मक भाषाओं में लिखे गए प्रोग्राम में केवल रनटाइम द्वारा प्रदान किया गया इनपुट हो सकता है और बिना किसी स्पष्ट रूप से परिभाषित अशुद्ध तरीकों के बिना रनटाइम को रिपोर्ट किए गए आउटपुट का उत्पादन कर सकता है, लेकिन ऐसा इसलिए है क्योंकि रनटाइम अपूर्ण कंप्यूटर सिस्टम के भीतर काम करने के इन सभी अशुद्ध विवरणों को दूर कर रहा है।
यह केवल एक बहुत अच्छी बात है यह जानने के लिए कि आप किन कार्यों का उपयोग कर रहे हैं वे शुद्ध हैं और कौन से नहीं हैं, ताकि आप इस बारे में अच्छे निर्णय ले सकें कि उनका उपयोग कैसे किया जाता है। प्रभाव कार्य, क्योंकि वे चीजें करते हैं या उन चीजों पर निर्भर हैं जो उनके उपयोग से स्पष्ट नहीं हैं, अप्रत्याशित रूप से केवल उपयोग के ज्ञान को देखते हुए व्यवहार कर सकते हैं। फ़ंक्शन के उद्देश्य के आगे के ज्ञान, और इस प्रकार इसे बाहरी राज्य से क्या करना है या क्या करना है, इसके लिए एक ऐसी प्रणाली लगाने की आवश्यकता होती है जो इसे एक सुसंगत स्थिति में उपयोग करता है और इस प्रकार एक निर्धारक परिणाम की उम्मीद करता है।