स्विफ्ट में संरचना और वर्ग के बीच का अंतर।

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

छवि स्रोत: स्टॉकनैप

मान प्रकार और संदर्भ प्रकार

जानकारी: ट्रीहाउस, एप्पल डॉक्टर।

जब यह Enums, Structs और Classes की बात आती है, तो मूल्य और डेटा प्रकारों के बीच के अंतर को जानना महत्वपूर्ण है। जब आप एक संख्या या संरचना बनाते हैं, तो यह एक मूल्य प्रकार है, और कक्षा एक संदर्भ प्रकार है।

  • मूल्य प्रकार: संरचना, Enum
  • संदर्भ प्रकार: कक्षा

जब आप अपने एप्लिकेशन के आसपास एक क्लास ऑब्जेक्ट पास करते हैं, तो आप वास्तव में उस ऑब्जेक्ट को लिंक कर रहे होते हैं, इसलिए आपके प्रोग्राम के विभिन्न हिस्से आपकी ऑब्जेक्ट को साझा और संशोधित कर सकते हैं। जब आप अपने कार्यक्रम के चारों ओर एक तीर [या enum] पास करते हैं, तो आपके पास उस संरचना की एक प्रति होगी। इस प्रकार, संरचनाओं में किए गए परिवर्तनों का आदान-प्रदान नहीं किया जा सकता है।

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

वर्ग

ओओपी में, एक वर्ग अलग-अलग प्रतियां बनाने की योजना है।

एक वर्ग वस्तुओं के निर्माण के लिए वस्तुओं (सदस्य मापदंडों या विशेषताओं) और व्यवहार (सदस्य कार्यों या विधियों) को बनाने की योजना है (किसी विशेष डेटा की संरचना)।

हम कीवर्ड का उपयोग करके वर्ग को परिभाषित करते हैं।

संरचना

संरचना लेबलिंग और नमूना निर्माण के मामले में कक्षा के समान है।

हम एक संरचनात्मक कीवर्ड का उपयोग करके संरचना को परिभाषित करते हैं।

संरचना और वर्ग के बीच सामान्य कारक क्या हैं?

  • मूल्यों को बचाने के लिए गुणों को परिभाषित करें
  • कार्यक्षमता प्रदान करने के तरीकों को परिभाषित करें
  • उन स्क्रिप्ट को परिभाषित करने के लिए स्क्रिप्ट का उपयोग करें जो उन्हें उनके मूल्यों तक पहुंच प्रदान करती हैं
  • स्टार्टअप की स्थिति को समायोजित करने के लिए स्टार्टअप को परिभाषित करें
  • सामान्य कार्यान्वयन के अलावा, यह उनकी कार्यक्षमता का विस्तार करने के लिए विस्तारित किया जाएगा
  • एक विशेष प्रकार की मानक कार्यक्षमता प्रदान करने के लिए प्रोटोकॉल के अनुकूल

कक्षाओं में अतिरिक्त विशेषताएं हैं जो शामिल नहीं हैं:

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

वर्तनी

हम क्लास कीवर्ड और स्ट्रक्चर कीवर्ड का उपयोग करते हुए एक क्लास को परिभाषित करते हैं। संरचना और वर्ग दोनों के लिए वाक्यविन्यास समान है।

संरचना प्रकार पर सदस्य पहल

सभी संरचनाओं में एक ऑटो-रेफरल सदस्य-आरंभकर्ता आरंभकर्ता होता है, जिसका उपयोग आप नई संरचना उदाहरणों की सदस्यता गुण आरंभ करने के लिए कर सकते हैं। आप नए नमूने के गुणों के लिए प्रारंभिक मानों को प्रारंभिक मान पास कर सकते हैं:

संरचना सटीकता {
var चौड़ाई = ०
var ऊँचाई = ०
}
एक्सेस vga = रिज़ॉल्यूशन (चौड़ाई: 640, ऊँचाई: 480)

अवतार के विपरीत, कक्षा प्रतियों को एक मानक आरंभीकरण मानक प्राप्त नहीं होता है।

नोट: यदि संरचना चर निजी है, तो सदस्य का प्रारंभिक नाम निजी है। इस मामले में, हमें एक समुदाय-आधारित स्टार्टअप कार्यक्रम प्रदान करना चाहिए।

उनका उपयोग कब और कहाँ किया जाना चाहिए?

उद्देश्य - सी में, सब कुछ NSObject से उपवर्ग हैं। NSString, NSArray और अन्य सभी संदर्भ प्रकार हैं। दूसरी ओर, समृद्ध प्रकार के मूल्य हैं। स्ट्रिंग, ऐरे, ग्लोसरी, आदि एक त्वरित संरचना है, जो एक मूल्य प्रकार है। डेटा प्रकार की तुलना में मूल्य प्रकार का उपयोग करने के कई फायदे हैं।

मूल्य प्रकार और संदर्भ प्रकारों के बारे में अधिक जानने के लिए कृपया मूल्य प्रकार बनाम संदर्भ प्रकार के बारे में मेरा लेख पढ़ें।

मुझे लगता है कि हमें संरचना का उपयोग करने की आवश्यकता है क्योंकि यदि संरचना बहुत बड़ी हो जाती है या वंशानुक्रम की आवश्यकता होती है, तो वे कक्षाओं में जटिलता और गिरावट को काफी कम कर सकते हैं।

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

जरूर पढ़े: कंटेंट और क्लासेस के बीच का चुनाव - Apple doc

आनंद लें !!

यदि आप इस पोस्ट को पढ़ना पसंद करते हैं, तो कृपया इसे दूसरों के साथ साझा करें और कुछ जानकारी साझा करें ताकि वे इसे साझा कर सकें

मध्यमा के लेखों के लिए आप मुझे फॉलो कर सकते हैं। इसके अलावा लिंक्डइन पर मुझसे संपर्क करें।

यदि आपके पास कोई टिप्पणी, प्रश्न या सुझाव हैं, तो नीचे टिप्पणी अनुभाग में उन्हें पोस्ट करने के लिए स्वतंत्र महसूस करें!