Swift में Static func बनाम class func: क्या अंतर है?

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

Swift में Static func बनाम class func: डेवलपर्स के लिए संपूर्ण मार्गदर्शिका

\n\n

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

\n\n

Swift में टाइप विधियाँ क्या हैं?

\n\n

अंतरों में गोता लगाने से पहले, आइए मूल बातें याद करें। Swift में विधियाँ दो प्रकार की होती हैं:

\n\n
    \n
  • इंस्टेंस विधियाँ (instance methods) — क्लास, स्ट्रक्चर या एनुम के किसी विशिष्ट ऑब्जेक्ट पर कॉल की जाती हैं।
  • \n
  • टाइप विधियाँ (type methods) — इंस्टेंस के बजाय स्वयं टाइप पर कॉल की जाती हैं। इन्हें घोषित करने के लिए static या class कीवर्ड का उपयोग किया जाता है।
  • \n
\n\n

टाइप विधियाँ फ़ैक्टरी विधियों, सिंगलटन, उपयोगिता फ़ंक्शन और कॉन्फ़िगरेशन के लिए आदर्श हैं जो किसी ऑब्जेक्ट की विशिष्ट स्थिति से बंधी नहीं होती हैं।

\n\n

Static func: अपरिवर्तनीयता का मुख्य संरक्षक

\n\n

static func एक ऐसी विधि है जिसे उपवर्ग में ओवरराइड नहीं किया जा सकता। यह पूरी तरह से उसी टाइप से संबंधित है जिसमें इसे परिभाषित किया गया है। static कीवर्ड क्लासेज़, स्ट्रक्चर और एनुम के लिए समान रूप से काम करता है।

\n\n

उदाहरण: क्लास में static func

\n\n
class Animal {\n    static func describe() {\n        print("मैं एक जानवर हूँ। मेरी प्रकृति को बदला नहीं जा सकता।")\n    }\n    \n    func speak() {\n        print("आवाज़ निकालता हूँ")\n    }\n}\n\nclass Dog: Animal {\n    // त्रुटि! static विधि को ओवरराइड नहीं किया जा सकता\n    // override static func describe() { }\n    \n    override func speak() {\n        print("भौं-भौं!")\n    }\n}\n\n// उपयोग\nAnimal.describe()  // "मैं एक जानवर हूँ। मेरी प्रकृति को बदला नहीं जा सकता।"\nDog.describe()     // यह भी "मैं एक जानवर हूँ। मेरी प्रकृति को बदला नहीं जा सकता।"\n
\n\n

ध्यान दें: Dog.describe() पैरेंट क्लास की विधि को कॉल करता है। हालाँकि तकनीकी रूप से उपवर्ग स्टैटिक विधि को इनहेरिट करता है, लेकिन इसे ओवरराइड नहीं किया जा सकता। यह व्यवहार final class func जैसा है।

\n\n

स्ट्रक्चर में Static func

\n\n

स्ट्रक्चर (value types) भी स्टैटिक विधियों का समर्थन करते हैं:

\n\n
struct MathHelper {\n    static func square(_ number: Int) -> Int {\n        return number * number\n    }\n}\n\nlet result = MathHelper.square(5)  // 25\n
\n\n

चूँकि स्ट्रक्चर इनहेरिटेंस का समर्थन नहीं करते, यहाँ static टाइप विधि घोषित करने का एकमात्र संभव तरीका है।

\n\n

Class func: इनहेरिटेंस का लचीलापन

\n\n

class func एक टाइप विधि है जिसे उपवर्ग में ओवरराइड किया जा सकता है। यह केवल क्लासेज़ (reference types) के लिए उपलब्ध है। स्ट्रक्चर और एनुम class का उपयोग नहीं कर सकते।

\n\n

उदाहरण: class func और इसका ओवरराइडिंग

\n\n
class Vehicle {\n    class func makeNoise() {\n        print("वाहन शोर करता है")\n    }\n    \n    class final func isMotorized() -> Bool {\n        return true\n    }\n}\n\nclass Car: Vehicle {\n    override class func makeNoise() {\n        print("कार गुनगुनाती है: भ्र्र्र्र!")\n    }\n    \n    // त्रुटि! final class func को ओवरराइड नहीं किया जा सकता\n    // override class func isMotorized() -> Bool { return false }\n}\n\n// उपयोग\nVehicle.makeNoise()  // "वाहन शोर करता है"\nCar.makeNoise()      // "कार गुनगुनाती है: भ्र्र्र्र!"\n
\n\n

जैसा कि आप देख सकते हैं, class func एक सामान्य वर्चुअल विधि की तरह व्यवहार करता है, लेकिन इसे टाइप स्तर पर कॉल किया जाता है। यह क्लास स्तर पर पॉलीमॉर्फिज़्म के लिए संभावनाएँ खोलता है।

\n\n

ब्लॉग

पुस्तक अनुशंसाएँ