प्योर फंक्शन

कंप्यूटर प्रोग्रामिंग में, एक शुद्ध फ़ंक्शन एक सबरूटीन होता है जिसमें निम्नलिखित गुण होते हैं:
 * 1) फ़ंक्शन  वापसी विवरण  रिलेशनल ऑपरेटर हैं # किसी फ़ंक्शन के समान तर्क के लिए स्थान समानता बनाम सामग्री समानता (स्थानीय स्थैतिक चर, गैर-स्थानीय चर, परिवर्तनीय मान प्रकार और संदर्भ प्रकार या इनपुट/आउटपुट के साथ कोई भिन्नता नहीं), और
 * 2) फ़ंक्शन का कोई साइड इफेक्ट नहीं है (कंप्यूटर विज्ञान) (स्थानीय स्थैतिक चर, गैर-स्थानीय चर, परिवर्तनशील संदर्भ तर्क या इनपुट/आउटपुट स्ट्रीम का कोई उत्परिवर्तन नहीं)।

कुछ लेखक, विशेष रूप से अनिवार्य भाषा समुदाय से, उन सभी कार्यों के लिए शुद्ध शब्द का उपयोग करते हैं जिनमें उपरोक्त संपत्ति 2 होती है (#कंपाइलर अनुकूलन पर चर्चा की गई)।

शुद्ध कार्य
C++ फ़ंक्शंस के निम्नलिखित उदाहरण शुद्ध हैं:

अशुद्ध कार्य
निम्नलिखित C++ फ़ंक्शंस अशुद्ध हैं क्योंकि उनमें उपरोक्त गुण 1 का अभाव है:

निम्नलिखित C++ फ़ंक्शंस अशुद्ध हैं क्योंकि उनमें उपरोक्त गुण 2 का अभाव है:

निम्नलिखित C++ फ़ंक्शंस अशुद्ध हैं क्योंकि उनमें उपरोक्त दोनों गुणों 1 और 2 का अभाव है:

शुद्ध कार्यों में I/O
I/O स्वाभाविक रूप से अशुद्ध है: इनपुट ऑपरेशंस संदर्भात्मक पारदर्शिता को कमजोर करते हैं, और आउटपुट ऑपरेशंस दुष्प्रभाव पैदा करते हैं। फिर भी, एक ऐसा अर्थ है जिसमें एक फ़ंक्शन इनपुट या आउटपुट निष्पादित कर सकता है और फिर भी शुद्ध हो सकता है, यदि प्रासंगिक I/O उपकरणों पर संचालन के अनुक्रम को तर्क और परिणाम दोनों के रूप में स्पष्ट रूप से मॉडलिंग किया जाता है, और I/O संचालन लिया जाता है विफल होना जब इनपुट अनुक्रम प्रोग्राम के निष्पादन शुरू होने के बाद से वास्तव में किए गए संचालन का वर्णन नहीं करता है।

दूसरा बिंदु यह सुनिश्चित करता है कि तर्क के रूप में प्रयोग करने योग्य एकमात्र अनुक्रम प्रत्येक I/O कार्रवाई के साथ बदलना चाहिए; पहला, अनुक्रम तर्कों में बदलाव के कारण अलग-अलग परिणाम देने के लिए I/O-प्रदर्शन फ़ंक्शन में अलग-अलग कॉल की अनुमति देता है। I/O मोनैड एक प्रोग्रामिंग मुहावरा है जिसका उपयोग आमतौर पर शुद्ध कार्यात्मक भाषाओं में I/O करने के लिए किया जाता है।

कंपाइलर अनुकूलन
उपरोक्त संपत्ति 2 वाले फ़ंक्शंस कंपाइलर ऑप्टिमाइज़ेशन तकनीकों के लिए अनुमति देते हैं जैसे कि सामान्य उपअभिव्यक्ति उन्मूलन और अंकगणितीय ऑपरेटरों के समान लूप अनुकूलन C++ उदाहरण है  विधि, एक स्ट्रिंग का आकार लौटाती है, जो उस मेमोरी सामग्री पर निर्भर करती है जहां स्ट्रिंग इंगित करती है, इसलिए उपरोक्त संपत्ति 1 का अभाव है। फिर भी, एक थ्रेड (कंप्यूटिंग) | एकल-थ्रेडेड वातावरण में, निम्नलिखित C++ कोड <सिंटैक्सहाइलाइट लैंग= सी++ > std::string s = हेलो, दुनिया! ; int a[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; पूर्णांक एल = 0;

के लिए (int i = 0; i < 10; ++i) { एल += एस.लंबाई + ए[आई]; }  इस प्रकार अनुकूलित किया जा सकता है कि का मान  लूप से पहले केवल एक बार गणना की जाती है।

कुछ प्रोग्रामिंग भाषाएँ किसी फ़ंक्शन के लिए शुद्ध गुण घोषित करने की अनुमति देती हैं:
 * फोरट्रान और डी में, द  कीवर्ड का उपयोग किसी फ़ंक्शन को केवल साइड-इफेक्ट मुक्त घोषित करने के लिए किया जा सकता है (यानी केवल उपरोक्त संपत्ति 2 है)। संकलक घोषणा के शीर्ष पर संपत्ति 1 निकालने में सक्षम हो सकता है।
 * जीएनयू कंपाइलर संग्रह में,  विशेषता संपत्ति 2 निर्दिष्ट करती है, जबकि   विशेषता दोनों गुणों के साथ वास्तव में शुद्ध फ़ंक्शन निर्दिष्ट करती है।
 * संकलन-समय फ़ंक्शन निष्पादन की पेशकश करने वाली भाषाओं को फ़ंक्शन को शुद्ध करने की आवश्यकता हो सकती है, कभी-कभी कुछ अन्य बाधाओं के साथ। उदाहरणों में शामिल  C++ की (दोनों गुण)।

इकाई परीक्षण
चूँकि शुद्ध फ़ंक्शंस में किसी फ़ंक्शन के समान तर्क के लिए समान रिटर्न स्टेटमेंट होता है, इसलिए वे इकाई परीक्षण के लिए उपयुक्त होते हैं।

यह भी देखें

 * संकलन-समय फ़ंक्शन निष्पादन: संकलन समय पर शुद्ध कार्यों का मूल्यांकन
 * नियतात्मक एल्गोरिथ्म
 * विशुद्ध रूप से कार्यात्मक डेटा संरचना
 * लैम्ब्डा कैलकुलस
 * दुष्प्रभाव (कंप्यूटर विज्ञान)
 * पुनर्प्रवेश (कंप्यूटिंग)
 * नपुंसकता
 * फोरट्रान 95 भाषा की विशेषताएँ #फोरट्रान में शुद्ध प्रक्रियाएँ कीवर्ड शुद्ध कार्यों की व्याख्या करते हैं
 * C++11#constexpr - C++ में सामान्यीकृत स्थिर अभिव्यक्ति कीवर्ड, संकलन-समय पर प्रयोग करने योग्य शुद्ध कार्यों को एनोटेट करता है