कई आधुनिक प्रोग्रामिंग भाषाएं बंद होने की कुछ अवधारणा का समर्थन करती हैं , अर्थात कोड के एक टुकड़े (एक ब्लॉक या एक फ़ंक्शन) का
- एक मूल्य के रूप में माना जा सकता है, और इसलिए एक चर में संग्रहीत किया जाता है, कोड के विभिन्न हिस्सों के चारों ओर पारित किया जाता है, एक कार्यक्रम के एक हिस्से में परिभाषित किया जाता है और एक ही कार्यक्रम के बिल्कुल अलग हिस्से में आह्वान किया जाता है।
- चर को उस संदर्भ से कैप्चर कर सकते हैं जिसमें इसे परिभाषित किया गया है, और जब बाद में इसे लागू किया जाता है (संभवत: एक पूरी तरह से अलग संदर्भ में) उन्हें एक्सेस करें।
यहाँ स्काला में लिखित क्लोजर का एक उदाहरण दिया गया है:
def filterList(xs: List[Int], lowerBound: Int): List[Int] =
xs.filter(x => x >= lowerBound)
फ़ंक्शन शाब्दिक x => x >= lowerBound
में मुक्त चर होता है lowerBound
, जो फ़ंक्शन के तर्क से बंद (बाध्य) होता filterList
है जिसमें समान नाम होता है। लाइब्रेरी पद्धति को बंद कर दिया जाता है filter
, जो इसे सामान्य कार्य के रूप में बार-बार लागू कर सकता है।
मैं इस साइट पर बहुत सारे सवाल और जवाब पढ़ रहा हूं और जहां तक मैं समझता हूं, शब्द बंद करना अक्सर कार्यात्मक प्रोग्रामिंग और कार्यात्मक प्रोग्रामिंग शैली के साथ स्वचालित रूप से जुड़ा हुआ है।
विकिपीडिया पर फ़ंक्शन प्रोग्रामिंग की परिभाषा पढ़ता है:
कंप्यूटर विज्ञान में, कार्यात्मक प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है जो गणना को गणितीय कार्यों के मूल्यांकन के रूप में मानता है और राज्य और पारस्परिक डेटा से बचा जाता है। यह अनिवार्य प्रोग्रामिंग शैली के विपरीत कार्यों के आवेदन पर जोर देता है, जो राज्य में परिवर्तनों पर जोर देता है।
और आगे
[...] कार्यात्मक कोड में, एक फ़ंक्शन का आउटपुट मान केवल उन तर्कों पर निर्भर करता है जो फ़ंक्शन के लिए इनपुट हैं [...]। साइड इफेक्ट्स को खत्म करना एक कार्यक्रम के व्यवहार को समझना और भविष्यवाणी करना बहुत आसान बना सकता है, जो कार्यात्मक प्रोग्रामिंग के विकास के लिए महत्वपूर्ण प्रेरणाओं में से एक है।
दूसरी ओर, प्रोग्रामिंग भाषाओं द्वारा प्रदान किए गए कई बंद निर्माण गैर-स्थानीय चर को पकड़ने और बंद होने पर उन्हें बदलने की अनुमति देते हैं, इस प्रकार पर्यावरण पर एक दुष्प्रभाव पैदा करते हैं जिसमें वे परिभाषित किए गए थे।
इस मामले में, क्लोजर कार्यात्मक प्रोग्रामिंग के पहले विचार को लागू करता है (फ़ंक्शन प्रथम श्रेणी की इकाइयां हैं जिन्हें अन्य मूल्यों की तरह चारों ओर ले जाया जा सकता है) लेकिन दूसरे विचार (साइड-इफेक्ट से बचने) की उपेक्षा करें।
क्या कार्यात्मक शैली माने जाने वाले साइड इफेक्ट्स के साथ क्लोजर का उपयोग किया जाता है या क्लोजर को एक अधिक सामान्य निर्माण माना जाता है जिसे कार्यात्मक और गैर-कार्यात्मक प्रोग्रामिंग शैली दोनों के लिए इस्तेमाल किया जा सकता है? क्या इस विषय पर कोई साहित्य है?
महत्वपूर्ण लेख
मैं साइड-इफेक्ट्स की उपयोगिता या साइड इफेक्ट्स के बंद होने पर सवाल नहीं उठा रहा हूं। इसके अलावा, मैं साइड इफेक्ट्स के साथ या इसके बिना बंद होने के फायदे / नुकसान के बारे में चर्चा में दिलचस्पी नहीं रखता।
मुझे केवल यह जानने में दिलचस्पी है कि क्या ऐसे क्लोजर का उपयोग करना अभी भी कार्यात्मक प्रोग्रामिंग के प्रस्तावक द्वारा कार्यात्मक शैली माना जाता है या यदि इसके विपरीत, कार्यात्मक शैली का उपयोग करते समय उनका उपयोग हतोत्साहित किया जाता है।