ब्लॉक तकनीक

मैजिक ट्रिक्स से पता चला: स्विफ्ट में निल-कॉल्सलिंग ऑपरेटर को तोड़ना

वैकल्पिक क्या है?

यह लगभग पहली बात है, और जब वे शुरू करते हैं तो हर त्वरित डेवलपर उन्हें पढ़ेगा। आइए विकल्पों को अधिक रोचक और छोटे तरीके से समझते हैं। मान लीजिए कि आप खरीदारी कर चुके हैं और आपकी जेब में एक बटुआ है। वॉलेट में कुछ पैसे हो सकते हैं। यदि आप एक वॉलेट को वैकल्पिक चर के रूप में समझते हैं, तो इसका कुछ मूल्य या कोई मूल्य नहीं हो सकता है।

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

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

बर्फ तोड़ें:

यदि वैकल्पिक चर nil [a [b] है तो Nil-coalescing ऑपरेटर [??] चेक करता है। यदि यह शून्य है, तो डिफ़ॉल्ट लौटाता है, अन्यथा वैकल्पिक अलिखित मान लौटाता है। आइए देखें कि यह कैसे स्विफ्ट में परिभाषित किया गया है

हम निम्नलिखित ऑपरेटरों का उपयोग कर सकते हैं –

लेकिन क्या कोई छोटी समस्या है? परिभाषाएं। हर बार जब हम nil-coalescing ऑपरेटर का उपयोग करते हैं, तो हमें डिफ़ॉल्ट मान की गणना करनी होगी, चाहे वैकल्पिक का कोई निश्चित मूल्य हो। डिफ़ॉल्ट मान की गणना एक जटिल ऑपरेशन या डिस्क भंडारण से एक फिर से संचालन हो सकता है। इसलिए, हम गणनाओं से बचना चाहते हैं जब उनकी आवश्यकता नहीं होती है, क्योंकि यह कभी-कभी ओवरहेड होता है। तो पढ़ने से बचने के लिए, हम निम्नानुसार फ़ंक्शन परिभाषा को फिर से लिख सकते हैं –

इसलिए, अब हम सीधे U टाइप का डिफ़ॉल्ट मान प्रदान करने के बजाय एक क्लोजर प्रकार [] – U प्रदान करते हैं। तो अब defaultValue एक प्रकार का फ़ंक्शन है [] -> U. DefaultValue फ़ंक्शन का कोड केवल अन्य के लिए ब्लॉक निष्पादित कर सकता है। उपरोक्त कार्यान्वयन में एक नुकसान भी है, क्योंकि defaultValue एक अनाम फ़ंक्शन है, इसलिए हमें उस कोड को लिखना चाहिए जो घुंघराले ब्रेसिज़ [{}] में डिफ़ॉल्ट मान की गणना करता है।

हम डिफ़ॉल्ट प्रकार के बंद होने से उन स्पष्ट घुंघराले ब्रेसिज़ को हटाने के लिए आटोक्लोजर प्रकार की विशेषता का उपयोग कर सकते हैं। यह संपत्ति किसी भी तर्क को धर्मान्तरित करती है ?? ऑपरेटर आवश्यक के रूप में बंद हो जाता है। इसलिए, हम मूल के रूप में एक ही इंटरफ़ेस प्रदान कर सकते हैं, लेकिन उपयोगकर्ता को गिनती defaultValue पैरामीटर का स्पष्ट समापन बनाने की आवश्यकता नहीं है। इसलिए, स्विफ्ट मानक पुस्तकालय में उपयोग की जाने वाली परिभाषाएं निम्नानुसार हैं

अब ऊपर दिए गए उदाहरण को देखें, हमने ब्रेड्स को डिफॉल्ट वेल्यू फ़ंक्शन से हटा दिया है, जो उसी तरह काम करता है जैसे कि हम हर दिन नील-कॉल्सलिंग ऑपरेटर के लिए करते हैं।

एक नया वैकल्पिक बंधन:

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

ऊपर, यदि विकल्प का कोई मूल्य नहीं है, तो हम केवल शून्य लौटाते हैं, अन्यथा हम कुछ गणना करते हैं। हम सुरक्षित गणना करने के लिए वैकल्पिक पर एक एक्सटेंशन बना सकते हैं।

सुरक्षा फ़ंक्शन प्रकार [लिपटा हुआ] -> यू पैरामीटर परिवर्तन को स्वीकार करता है। यदि विकल्प शून्य नहीं है, तो उस पर परिवर्तन लागू किया जाता है, अन्यथा सुरक्षा फ़ंक्शन शून्य हो जाता है।

इस विस्तार के साथ, हम एक अधिक कॉम्पैक्ट और बहुमुखी तरीके से फ़ंक्शन को ओवरराइड कर सकते हैं।

इसलिए, हम किसी भी प्रकार के स्ट्रक्चर या क्लास में सुरक्षित रूप से कार्य कर सकते हैं।

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

से

   स्रोत: 0x जानकारी द्वारा HACKERNOON से संकलित। कॉपीराइट लेखक का है, मूल लिंक: https://hackernoon.com/magic-trick-revealed-breaking-the-nil-coalescing-operator-in-swift-7f319e40e0bd .source=collection_category-4-0—- —-। बिना अनुमति के पुनर्मुद्रण