Computer >> कंप्यूटर >  >> स्मार्टफोन्स >> iPhone

परदे के पीछे स्विफ्ट में मैप, फिल्टर और रिड्यूस को देखें

एक फंक्शन कुछ इनपुट लेता है, उसमें कुछ करता है और एक आउटपुट बनाता है। एक समारोह में एक हस्ताक्षर और एक शरीर होता है। यदि आप किसी फंक्शन को वही इनपुट देते हैं तो आपको हमेशा वही आउटपुट मिलता है। यह संक्षेप में फ़ंक्शन . की परिभाषा है

अब हम कार्यों के बारे में और अधिक विस्तार से चर्चा करेंगे। हम स्विफ्ट में उच्च क्रम के कार्यों का पता लगाएंगे। एक फ़ंक्शन जो किसी अन्य फ़ंक्शन को इनपुट के रूप में लेता है या एक फ़ंक्शन देता है उसे . कहा जाता है एक उच्च आदेश समारोह

स्विफ्ट में, हम मानचित्र, फ़िल्टर, कम करें . के साथ खेलते हैं हर दिन। जब हम इन कार्यों का उपयोग करते हैं, तो यह जादू जैसा लगता है। इस बिंदु पर, आपको इस बात का अंदाजा नहीं हो सकता है कि पर्दे के पीछे क्या चल रहा है। कार्यात्मक प्रोग्रामिंग के विचारों और दृष्टिकोणों के माध्यम से मानचित्र, फ़िल्टर और कार्य को कम करें। भले ही स्विफ्ट एक शुद्ध कार्यात्मक भाषा नहीं है, यह आपको कार्यात्मक चीजें करने की अनुमति देती है।

अब आइए एक-एक करके देखें कि उनके लिए पृष्ठभूमि में क्या हो रहा है। पहले हम कुछ विशेष डेटा प्रकारों के लिए इन कार्यों के मूल संस्करणों को लागू करेंगे, फिर हम एक सामान्य संस्करण को लागू करने का प्रयास करेंगे।

मानचित्र समारोह

मान लें कि हमारे पास पूर्णांकों की एक सरणी है और हमें एक फ़ंक्शन लिखने की आवश्यकता है जो मूल सरणी के प्रत्येक तत्व में कुछ डेल्टा मान जोड़ने के बाद एक नया सरणी देता है। हम नीचे दिए गए लूप के लिए सरल का उपयोग करके इसके लिए आसानी से एक फ़ंक्शन लिख सकते हैं:

अब हमें एक और फ़ंक्शन की आवश्यकता है जो मूल सरणी के प्रत्येक तत्व को दोगुना करके एक नया सरणी देता है। इसके लिए हम इसे नीचे की तरह लागू कर सकते हैं:

यदि हम उपरोक्त दो कार्यों को देखें, तो हम पा सकते हैं कि वे मूल रूप से एक ही कार्य कर रहे हैं। केवल लूप के अंदर की कार्यक्षमता अलग है। वे दोनों एक पूर्णांक . लेते हैं इनपुट के रूप में सरणी, लूप का उपयोग करके प्रत्येक तत्व को रूपांतरित करें, और एक नया सरणी लौटाएं। तो मूल रूप से मुख्य बात प्रत्येक तत्व को कुछ नए में बदलना है।

चूंकि स्विफ्ट उच्च-क्रम के कार्यों का समर्थन करता है, इसलिए हम एक फ़ंक्शन लिख सकते हैं जो पूर्णांकों की एक सरणी लेगा, फ़ंक्शन को इनपुट के रूप में रूपांतरित करेगा, और मूल सरणी के प्रत्येक तत्व में ट्रांसफ़ॉर्म फ़ंक्शन को लागू करके एक नया सरणी लौटाएगा।

लेकिन फिर भी, उपरोक्त के साथ एक समस्या है:यह केवल एक पूर्णांक सरणी देता है। उदाहरण के लिए, यदि हमें इनपुट पूर्णांक सरणी को एक स्ट्रिंग सरणी में बदलने की आवश्यकता है, तो हम इस फ़ंक्शन के साथ ऐसा नहीं कर सकते। ऐसा करने के लिए, हमें एक सामान्य कार्य लिखना होगा जो किसी भी प्रकार के लिए काम करता है।

हम एक ऐरे एक्सटेंशन में एक सामान्य फ़ंक्शन को इस तरह कार्यान्वित कर सकते हैं:

  1. ऐरे एक्सटेंशन में एक मानचित्र फ़ंक्शन घोषित करें जो एक सामान्य प्रकार के साथ काम करता है T
  2. फ़ंक्शन प्रकार का फ़ंक्शन लेता है (Element) ->; इनपुट के रूप में टी
  3. एक खाली परिणाम सरणी घोषित करें जिसमें T . हो फ़ंक्शन के अंदर डेटा टाइप करें।
  4. अपने आप को पुनरावृत्त करते हुए लूप के लिए लागू करें और तत्व को टाइप करने के लिए ट्रांसफ़ॉर्म फ़ंक्शन को कॉल करें T
  5. परिणामी सरणी में परिवर्तित मान जोड़ें

इस प्रकार मानचित्र फंक्शन स्विफ्ट में काम करता है। अगर हमें मानचित्र . को लागू करने की आवश्यकता है समारोह, तो हम इसे ऊपर की तरह लागू करेंगे। तो मूल रूप से, यह किसी सरणी में कोई जादू नहीं करता है - हम आसानी से फ़ंक्शन को स्वयं परिभाषित कर सकते थे।

फ़िल्टर फ़ंक्शन

मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी है और हम सरणी में केवल सम संख्याएँ रखना चाहते हैं। हम लूप के लिए एक सरल का उपयोग करके इसे लागू कर सकते हैं:

अब फिर से, मान लें कि हमारे पास प्रोजेक्ट के क्लास फ़ाइल नामों का प्रतिनिधित्व करने वाले स्ट्रिंग्स की एक सरणी है और हम केवल . रखना चाहते हैं। तेज फ़ाइलें। यह नीचे की तरह एक लूप के साथ भी किया जा सकता है:

यदि हम उपरोक्त दो कार्यों के कार्यान्वयन को करीब से देखते हैं, तो हम समझ सकते हैं कि वे मूल रूप से एक ही काम करते हैं - केवल दो सरणियों के लिए डेटा प्रकार अलग है। हम एक सामान्य फ़िल्टर फ़ंक्शन को लागू करके इसे सामान्यीकृत कर सकते हैं, जो इनपुट के रूप में एक सरणी और एक फ़ंक्शन लेता है, और includeElement के आउटपुट पर निर्भर करता है। फ़ंक्शन, यह तय करता है कि परिणामी सरणी में तत्व जोड़ना है या नहीं।

फ़ंक्शन कम करें

मान लीजिए कि हमारे पास पूर्णांकों की एक सरणी है और हम दो कार्यों को लागू करना चाहते हैं जो तत्वों का योग और उत्पाद लौटाते हैं। हम लूप के लिए एक सरल का उपयोग करके इसे लागू कर सकते हैं:

अब पूर्णांकों की एक सरणी होने के बजाय, मान लें कि हमारे पास स्ट्रिंग्स की एक सरणी है और हम सरणी में सभी तत्वों को जोड़ना चाहते हैं:

सभी तीन कार्य मूल रूप से एक ही काम करते हैं। वे इनपुट के रूप में एक सरणी लेते हैं, परिणामी चर को प्रारंभ करते हैं, सरणी पर पुनरावृति करते हैं, और परिणामी चर को अद्यतन करते हैं।

यहां से हम एक सामान्य कार्य को लागू कर सकते हैं जो सभी के लिए काम करना चाहिए। ऐसा करने के लिए हमें परिणामी चर के प्रारंभिक मूल्य और प्रत्येक पुनरावृत्ति में उस चर को अद्यतन करने के लिए फ़ंक्शन की आवश्यकता होती है।

तो हम निम्नलिखित परिभाषा के साथ सामान्य कार्य को लागू कर सकते हैं:

उपरोक्त कार्यान्वयन [Element] प्रकार के किसी भी इनपुट सरणी के लिए सामान्य है। यह T . प्रकार के परिणाम की गणना करेगा . काम करने के लिए, इसे T . प्रकार के प्रारंभिक मान की आवश्यकता होती है परिणामी चर को असाइन करने के लिए। फिर, इसे (T, Element) -> . प्रकार के फ़ंक्शन की आवश्यकता होती है T जो परिणामी चर को अद्यतन करने के लिए प्रत्येक पुनरावृत्ति में लूप के अंदर उपयोग किया जाएगा।

पढ़ने के लिए धन्यवाद!


  1. मदरबोर्ड का कार्य और परिभाषा

    हम अक्सर हार्डवेयर या कंप्यूटर हार्डवेयर का उल्लेख करते हैं या कंप्यूटर के पुर्जे ऐसे हिस्से होते हैं जिन्हें हम ठोस या भौतिक रूप में देख सकते हैं। कंप्यूटर हार्डवेयर कई यांत्रिक और इलेक्ट्रॉनिक घटकों से बना होता है जिन्हें मॉड्यूल बनाने के लिए इकट्ठा किया जाता है जिन्हें फ़ंक्शन के अनुसार नाम दिया

  1. स्विफ्ट में काम करने के लिए एक त्वरित परिचय

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

  1. आइए स्विफ्ट में जेनरिक और किसी भी प्रकार के बीच के अंतरों को देखें

    स्विफ्ट आजकल शीर्षतम प्रकार की सुरक्षित भाषाओं में से एक है। ??? ओह रुको !! यदि कोई भाषा टाइप-सुरक्षित है तो इसका क्या अर्थ है? ? टाइप-सुरक्षित भाषा हमेशा यह सुनिश्चित करती है कि ऑपरेशन उस बिंदु पर उपलब्ध सही प्रकार के डेटा के साथ काम करे।✓ यदि किसी भाषा में विभिन्न डेटा प्रकारों (जैसे, Int, Flo