प्योर फंक्शन

कंप्यूटर प्रोग्रामिंग में, एक प्योर फ़ंक्शन एक सबरूटीन होता है जिसमें निम्नलिखित गुण होते हैं:
 * 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++ कोड होता है

इस प्रकार अनुकूलित किया जा सकता है कि का मान  लूप से पहले केवल एक बार गणना की जाती है।

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

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

यह भी देखें

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