स्विफ्ट आजकल शीर्षतम प्रकार की सुरक्षित भाषाओं में से एक है। ???
ओह रुको !! यदि कोई भाषा टाइप-सुरक्षित है तो इसका क्या अर्थ है? ?
टाइप-सुरक्षित भाषा हमेशा यह सुनिश्चित करती है कि ऑपरेशन उस बिंदु पर उपलब्ध सही प्रकार के डेटा के साथ काम करे।✓
यदि किसी भाषा में विभिन्न डेटा प्रकारों (जैसे, Int, Float, String, Array, Dictionary) को घोषित करने की क्षमता है और इसमें यह सुनिश्चित करने की क्षमता भी है कि एक विशेष डेटा प्रकार के साथ घोषित एक चर कभी भी एक अलग प्रकार का नहीं होगा डेटा, तो इसे टाइप-सुरक्षित भाषा कहा जाता है।
टाइप-सेफ लैंग्वेज में, टाइप चेकिंग हमेशा की जाती है। यह भाषा के आधार पर संकलन समय या रन टाइम में हो सकता है।✅
अब, स्विफ्ट में जेनरिक क्या हैं??
जेनरिक सुरक्षित प्रकार हैं, और लचीले, पुन:प्रयोज्य कार्यों और प्रकारों को लिखने में हमारी सहायता करते हैं। जेनरिक का उपयोग करके, हम कोड लिख सकते हैं जो सभी प्रकार के डेटा के लिए काम करता है। चूंकि स्विफ्ट एक टाइप-सुरक्षित भाषा है, इसलिए इसे तोड़े बिना हम सामान्य कोड लिखने में सक्षम हैं जो कोड दोहराव से बच सकते हैं।
आइए एक सरल उदाहरण लेते हैं:एक ऐरे एक ऑर्डर किया गया संग्रह है जो एक ही प्रकार के डेटा को पकड़ सकता है। इसलिए एक सरणी की परिभाषा में, हम देख सकते हैं कि यह एक सामान्य प्रकार का तत्व लेता है। इसलिए एक ऐरे संग्रह का सामान्य प्रकार becomes बन जाता है ।
ठीक है। ठंडा। फिर स्विफ्ट में एनी टाइप क्या है? ???
स्विफ्ट किसी भी प्रकार का भी समर्थन करता है। जैसा कि नाम से संकेत मिलता है, यह संरचना, वर्ग, एनम और फ़ंक्शन प्रकार जैसे किसी भी प्रकार के उदाहरण का प्रतिनिधित्व कर सकता है।
तो क्या ऑब्जेक्टिव C id और Swift का कोई समान है?उन्हें> ?
स्विफ्ट 3 में, उद्देश्य C id स्विफ्ट के किसी भी प्रकार के नक्शे टाइप करें। यह स्विफ्ट और ऑब्जेक्टिव सी की अनुकूलता में सुधार करता है।
लेकिन कैसे और क्यों??
स्विफ्ट 2 में, उद्देश्य सी आईडी स्विफ्ट के किसी भी ऑब्जेक्ट में मैप किया गया था। यह ज्यादातर मामलों में अच्छा काम करता है, लेकिन कभी-कभी इसके परिणामस्वरूप अप्रत्याशित व्यवहार होता है। स्विफ्ट में प्रमुख अवधारणाओं में से एक मूल्य प्रकार है, और यह मानचित्रण इस अवधारणा के साथ उचित न्याय नहीं कर रहा था।
आईओएस विकास के लिए स्विफ्ट सिर्फ एक नई भाषा है, और उद्देश्य सी वर्षों से आसपास रहा है। तो निश्चित रूप से अधिकांश परियोजनाओं को उद्देश्य सी में ही विकसित किया गया था। अब ऑब्जेक्टिव प्रोजेक्ट को स्विफ्ट प्रोजेक्ट में बदलने के लिए, आवश्यकता यह आ गई कि किसी भी स्विफ्ट टाइप को किसी ऑब्जेक्टिव C ऑब्जेक्ट से ब्रिज करना संभव हो।
लेकिन स्विफ्ट क्लासेस और स्विफ्ट वैल्यू टाइप्स जैसे इंट, स्ट्रिंग, फ्लोट के लिए यह कोई समस्या नहीं थी क्योंकि उनके पास पहले से ही उनके ऑब्जेक्टिव सी समकक्ष हैं। समस्या उन स्विफ्ट मान प्रकारों के लिए उत्पन्न हुई जिनका कोई उद्देश्य C समकक्ष नहीं था।
तो इसे ठीक करने के लिए, Objective C id type को Swift Any type पर मैप किया गया।✅✅✅
पर्याप्त परिभाषाएं?. अब मुख्य विषय पर आते हैं। उपरोक्त बिंदुओं से, ऐसा लगता है कि जेनरिक और कोई भी प्रकार समान हैं। लेकिन क्या वाकई वे हैं???
उच्च स्तर पर, कोई भी जेनरिक के समान दिख सकता है। लेकिन आइए कुछ अंतर खोजने की कोशिश करें-???
हम सभी जानते हैं कि स्टैक . क्या होता है डेटा संरचनाओं में है, है ना? स्टैक एक बुनियादी रेखीय डेटा संरचना है जहां आइटम का सम्मिलन और विलोपन केवल एक छोर पर होता है।
अब हम स्विफ्ट में स्टैक संरचना को लागू करेंगे। पहले, हम जेनरिक का उपयोग करके फिर किसी भी प्रकार के साथ लागू करेंगे।
जेनेरिक का उपयोग करके स्टैक कार्यान्वयन:
उपरोक्त स्टैक कार्यान्वयन जेनरिक का उपयोग कर रहा है। संरचना एक सामान्य प्रकार का तत्व takes लेती है आइटम और उस आइटम का उपयोग करके एक स्टैक लागू करता है। अब जेनेरिक स्टैक के साथ कुछ ऑपरेशन करते हैं:
यह एक सामान्य स्टैक घोषित करता है जो एक पूर्णांक प्रकार के तत्व को धारण कर सकता है। हम पूर्णांक तत्व को स्टैक पर धकेल रहे हैं। इस बिंदु तक, सब कुछ बढ़िया काम करता है।
लेकिन क्या होगा अगर मैं जेनेरिकस्टैक के ऊपर एक फ्लोट तत्व को पुश करना चाहता हूं?
❌❌ उफ़! संकलन त्रुटि!
किसी भी प्रकार का उपयोग करके स्टैक कार्यान्वयन:
इस स्टैक कार्यान्वयन में, आइटम सरणी किसी भी प्रकार के तत्व को धारण कर सकती है। हम इस बारे में निर्दिष्ट नहीं कर रहे हैं कि आइटम . का सटीक डेटा प्रकार क्या होगा? परिभाषा में सरणी तत्व। आइए अब इस स्टैक पर वही बुनियादी ऑपरेशन करते हैं:
कोई समस्या नहीं है, है ना? यहां भी सब कुछ ठीक चल रहा है। प्रारंभ में, हमने एक स्टैक घोषित किया और इसमें दो पूर्णांक तत्वों को धक्का दिया। जब हम शो () . को कॉल करते हैं विधि, यह सटीक सरणी को प्रिंट करती है [3, 4]।
अब इसमें एक फ्लोट वैल्यू डालते हैं।☄️
✅✅ कोई त्रुटि नहीं! सब कुछ ठीक काम करता है!
तो परदे के पीछे क्या हो रहा है ? हमें कोई त्रुटि क्यों नहीं मिल रही है??? ?
जेनेरिक मूल रूप से संकलक को बताता है कि:
मैंने एक सामान्य प्रकार घोषित किया है और मैं आपको एक सटीक प्रकार बाद में देने जा रहा हूं। मैं चाहता हूं कि आप मेरे द्वारा निर्दिष्ट हर जगह उस प्रकार को लागू करें।
कोई भी प्रकार मूल रूप से संकलक को बताता है:
इस चर के बारे में चिंता न करें, यहां किसी भी प्रकार को लागू करने की आवश्यकता नहीं है, मुझे वह करने दें जो मैं करना चाहता हूं।
जेनेरिक का उपयोग लचीले कार्यों को परिभाषित करने के लिए किया जा सकता है, लेकिन तर्कों के प्रकार अभी भी संकलक द्वारा जांचे जाते हैं। स्विफ्ट के टाइप सिस्टम को चकमा देने के लिए किसी भी प्रकार का उपयोग किया जा सकता है।?
सामान्य स्टैक घोषणा में , हम कंपाइलर को बता रहे हैं कि स्टैक को केवल पूर्णांक प्रकार लेना चाहिए। फिर जब हम इसमें एक फ्लोट प्रकार का तत्व डालने का प्रयास कर रहे हैं, तो इसका मतलब है कि हम उस वादे को तोड़ रहे हैं। इसलिए यह एक संकलन समय त्रुटि फेंक रहा है। यह हमेशा अपेक्षा करता है कि तत्व एक पूर्णांक प्रकार का होना चाहिए।
लेकिन किसी भी ढेर के लिए , हमें कोई संकलन समय या रनटाइम त्रुटि नहीं मिल रही है। भले ही हम शो() . कहें विधि, यह स्टैक को [3, 4, 5.0] . के रूप में प्रिंट करता है जिसका अर्थ है कि ढेर में पूर्णांक और फ्लोट प्रकार के मान होते हैं। तो किसी भी स्टैक में, कोई प्रकार का प्रतिबंध नहीं है, हम इसमें किसी भी प्रकार का मान डाल सकते हैं (लेकिन रनटाइम अपवाद की संभावनाएं हैं)।
निष्कर्ष
इसलिए यदि हम जेनरिक का उपयोग करते हैं तो हम स्विफ्ट के प्रकार की सुरक्षा से समझौता किए बिना लचीले कार्यों, संरचनाओं, वर्गों और प्रोटोकॉल को लिख सकते हैं। लेकिन अगर हम किसी भी प्रकार का उपयोग करते हैं, तो हम अपने मालिक की तरह हैं, हम लगभग कुछ भी कर सकते हैं जो हम चाहते हैं।
??? प्रोत्साहित करना!!! पढ़ने के लिए धन्यवाद!! ???