बंदों के बारे में इतनी चर्चा क्यों है? [बन्द है]


9

डेवलपर्स के बीच बंदों के बारे में बहुत चर्चा क्यों है? अपने करियर में मैंने कभी जानबूझकर उनका उपयोग नहीं किया, हालांकि वे क्या हैं, यह स्पष्ट रूप से नहीं समझते हैं।

UPD: सिर्फ स्पष्ट करने के लिए। सवाल यह है कि इन दिनों क्लोजर कॉन्सेप्ट इतना चर्चित क्यों हो गया।


3
आप जानबूझकर किसी ऐसी चीज का उपयोग कैसे कर पाएंगे जो आपको नहीं पता कि यह क्या है? इसलिए मूल रूप से आपको सबसे पहले पूछना चाहिए (या बल्कि खोजना) कि क्या क्लोजर हैं।
स्टीवन ज्यूरिस

1
क्या आपने विकिपीडिया लेख पढ़ा? आप इसके बारे में समझने में क्या असफल रहे?
केविन क्लाइन

2
आपका करियर किस पर आधारित है?

4
यह किस तरह का सवाल है? क्या "बुलबुल"? तुम क्या नहीं समझते? इसके बजाय आपने वह सवाल क्यों नहीं पूछा ?
Aaronaught

4
ओपी के बचाव में, बंद एक पुरानी अवधारणा है लेकिन हाल ही में वे शहर की बात कर रहे हैं, इसलिए बोलने के लिए। और यह अवधारणा वास्तव में बहुत ही सरल है, जिन्होंने थोड़ा और गणित सीखा है, मैं यह भी नहीं समझ सकता कि लोग उनके बारे में क्यों बात करते हैं जैसे कि उन्हें समझना बहुत मुश्किल था। हो सकता है कि यह सिर्फ अपने आप को स्मार्ट बनाने का एक तरीका है: "देखो, मैं बंद कर देता हूं जो बहुत मुश्किल है, इसलिए मैं रॉक करता हूं"।
परिमाण_देव

जवाबों:


22

एक क्लोजर कोड है जो उस दुनिया को याद करता है जहां से यह अभी भी प्रयोग करने योग्य है जहां इसे लाया गया है।

एक उदाहरण जावा में एक अनाम फ़ंक्शन को परिभाषित कर रहा है जो जानता है कि यह YourObject के अंदर है और इसके तरीकों और कार्यों में हेरफेर कर सकता है। यह फ़ंक्शन तब जैसे कि एक श्रोता के अंदर गहराई में चला जाता है, जहां इसे घुमाया जाता है, लेकिन फिर भी इसकी जड़ों तक एक जीवन रेखा होती है।

यह एक बहुत शक्तिशाली अवधारणा है क्योंकि यह आपको कोड वितरित करने की अनुमति देता है - जो कि इसका उपयोग करने वाले कोड के लिए अनभिज्ञ है - कोड के अन्य भागों में वापस पहुंच सकता है।


1
हाँ। यह न केवल प्रक्रिया, बल्कि राज्य, अन्य कोड में इंजेक्ट करने का एक तरीका है। यह एल्गोरिदम को डिजाइन करने में बहुत अधिक लचीलेपन की अनुमति देता है; आप टेम्प्लेटेड विधियों को डिज़ाइन कर सकते हैं, जो राज्य के उप-क्षेत्रों पर निर्भर करते हैं, जो कि संकलन-समय पर भी नहीं जानते होंगे। नकारात्मक पक्ष यह है कि उस विधि के मूल स्रोत, और इस प्रकार राज्य के लिए लिंक, इसके बारे में जानने वाले उपभोग पद्धति के बिना तोड़ा जा सकता है; जब ऐसा होता है तो आपको हार्ड-टू-रन रनटाइम त्रुटियाँ मिलती हैं।
कीथ्स

1
हा हा, जावा में अनाम फ़ंक्शन ... मजेदार।
विन्यासकर्ता

1
@configurator, मज़ेदार नहीं, एक तथ्य।


जावा 7 में क्लोजर नहीं है।

6

सुरुचिपूर्ण तरीके से विभिन्न समस्याओं को हल करने के लिए क्लोज़र केवल कुछ हैं। दरअसल, प्रोग्रामिंग भाषाओं में जहां कोई क्लोजर मौजूद नहीं है, समान कार्यों को लागू करने के लिए तकनीक बनाई जाती है।

जावा में C ++ या Runnables में फंक्शनलर्स के बारे में सोचें। वे सिर्फ तकनीकें हैं जो कार्यात्मकताओं को बंद करने के समान अनुमति देती हैं। किसी तरह का «मैनुअल क्लोजर»।

क्लोज़र अधिक लोकप्रिय हो रहे हैं क्योंकि वे लोकप्रिय भाषाओं में एकीकृत हैं: जावास्क्रिप्ट ऑनलाइन अनुप्रयोगों (उदाहरण के लिए Google डॉक्टर) के कारण बढ़ रहा है, C # ने इसे लागू किया, PHP ने इसे 5.3 से लागू किया, और इसी तरह।

अब यह क्लोजर अधिक से अधिक तकनीकों में उपलब्ध है, यह बिल्कुल सीधा हो जाता है कि अधिक से अधिक लोग उनमें रुचि रखते हैं।

तो अब, बंद क्या हैं? यह काफी सरल है। एक क्लोजर एक फ़ंक्शन और इसे निष्पादित करने के लिए एक संदर्भ है। यह एक वस्तु के रूप में हेरफेर किया जाता है। यह क्यों उपयोगी है? मौजूदा कोड में अपने कोड को हुक करने के लिए यह उपयोगी है।

यहां दो सामान्य स्थितियां हैं जिनकी आवश्यकता होती है: जब क्रियाओं को कोड के किसी अन्य टुकड़े द्वारा प्रबंधित किया जाता है, जैसे कि थ्रेड पूल के साथ मल्टीथ्रेडिंग में, या जब किसी कार्रवाई को एक चुना घटना पर निष्पादित किया जाता है (यूआई के लिए जावास्क्रिप्ट में अक्सर उपयोग किया जाता है)।


क्या मैंने आपको स्पष्ट रूप से समझा? कुछ "मैनुअल क्लोजर" (वास्तव में एक क्लोजर नहीं हैं, लेकिन कुछ ऐसा है जो उनके व्यवहार से मिलता जुलता है) और कुछ "ट्रू क्लोजर" हैं?

बंद करना एक भाषा क्षमता है। कुछ भाषा में वह क्षमता नहीं होती है, इसलिए आप उन उपकरणों का उपयोग करके मैन्युअल रूप से बंद करते हैं जो भाषा आपको प्रदान करती है। यह कहना कि वे TRUE हैं या नहीं, एक बहुत ही दिलचस्प बहस IMHO नहीं है।
डेडलिंक

2
@gasan, आप हमेशा असेंबली को कोड़ा मार सकते हैं और मैन्युअल रूप से जो भी पैटर्न आप चाहते हैं वह गोटो के बयानों के साथ कर सकते हैं। इसी तरह आप मैन्युअल रूप से एक "जबकि" पाश (C ++ में) के साथ "लूप के लिए" कर सकते हैं। अधिक उन्नत, उच्च स्तर सामान्य चीजें करने का एक मानकीकृत तरीका प्रदान करते हैं।
फिलिप

6

मैंने दूसरे दिन एक मनोरंजक उद्धरण देखा, यह "कार्यों के साथ कक्षाएं डेटा हैं। क्लोजर डेटा के साथ फ़ंक्शन हैं" की तर्ज पर था।

हाँ, यह एक ओवरसाइम्प्लिफिकेशन है, लेकिन यह बिंदु को पार करने में मदद करता है।


+1 अच्छा तरीका यह देखना है कि एक क्लोजर क्या है: D
deadalnix
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.