स्विफ्ट में स्वच्छ कोड: कैसे लिखें ताकि सहकर्मी आपको कोसें नहीं

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

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

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

स्विफ्ट में स्वच्छ कोड कैसे लिखें: उन लोगों के लिए मार्गदर्शिका जो खुद और अपने सहकर्मियों का सम्मान करते हैं

\n\n

हर डेवलपर ने कम से कम एक बार ऐसा प्रोजेक्ट खोला होगा जो छह महीने पहले लिखा गया था, और समझ नहीं पाया कि वहाँ क्या चल रहा है। या कोड-रिव्यू पर टिप्पणी मिली: "इसे और सरल लिखा जा सकता था"। परिचित लगता है? अगर हाँ — यह लेख आपके लिए है।

\n\n

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

\n\n

नियम #1: नामकरण सबसे महत्वपूर्ण है

\n\n

सबसे आम गलती है वेरिएबल का नाम x या temp रखना। फिर कोई और डेवलपर आता है और सोचता है: "यह x क्या है? निर्देशांक? संख्या?"

\n\n

स्विफ्ट में ऐसे नाम देना आम है जो वाक्यों की तरह पढ़े जाएँ। यह सिर्फ सुंदर नहीं है — यह तुरंत समझने में मदद करता है कि कोड क्या करता है।

\n\n
// बुरा\nlet a = 5.0\nvar b = "John"\n\n// अच्छा\nlet discountRate = 5.0\nvar userName = "John"
\n\n

फंक्शन और मेथड के लिए भी यही नियम लागू होता है। नाम को इस प्रश्न का उत्तर देना चाहिए "यह मेथड क्या करता है?"। आदेशात्मक रूप में क्रियाओं का उपयोग करें:

\n\n
// बुरा\nfunc data() -> [String] { ... }\n\n// अच्छा\nfunc fetchUsers() -> [String] { ... }
\n\n

और अगर फंक्शन बूलियन मान लौटाता है, तो नाम is, has या contains से शुरू करें:

\n\n
func isUserLoggedIn() -> Bool\nfunc hasValidEmail() -> Bool
\n\n

नियम #2: ऑप्शनल — दुश्मन नहीं, बल्कि उपकरण हैं

\n\n

कई नौसिखिए ऑप्शनल से डरते हैं और किसी भी कीमत पर उनसे छुटकारा पाने की कोशिश करते हैं। वे हर जगह if let लिखते हैं या, इससे भी बुरा, फोर्स-अनरैप करते हैं। लेकिन स्विफ्ट में स्वच्छ कोड वह कोड है जो nil के साथ सुरक्षित रूप से काम करता है।

\n\n

याद रखें: ! मदद की चीख है। इसका उपयोग केवल तभी करें जब आप पूरी तरह से सुनिश्चित हों कि मान nil नहीं है (जैसे IBOutlet के साथ काम करते समय)।

\n\n
// खतरनाक कोड\nlet name = optionalName!\n\n// सुरक्षित विकल्प\nguard let name = optionalName else {\n    return\n}\nprint(name)
\n\n

और ऑप्शनल की श्रृंखला के लिए ? और nil-coalescing का उपयोग करें:

\n\n
let userCity = user?.address?.city ?? "अज्ञात"
\n\n

यह कोड क्रैश नहीं होगा, भले ही user या address nil हों। और यह एक सामान्य वाक्य की तरह पढ़ा जाता है: "उपयोगकर्ता का शहर या 'अज्ञात'"।

\n\n

नियम #3: जहाँ संभव हो क्लास के बजाय स्ट्रक्चर का उपयोग करें

\n\n

स्विफ्ट में क्लास और स्ट्रक्चर दोनों हैं। लेकिन कई लोग आदत से हर जगह क्लास का उपयोग करते हैं। यह गलत है। स्ट्रक्चर value types हैं, और वे मल्टीथ्रेडेड कोड में अधिक सुरक्षित हैं। साथ ही वे कॉपी होते हैं, न कि संदर्भित, जिससे साइड इफेक्ट का जोखिम कम होता है।

\n\n

स्ट्रक्चर का उपयोग करें यदि:

\n
    \n
  • जटिल लॉजिक के बिना डेटा स्टोर करना हो
  • \n
  • इनहेरिटेंस की आवश्यकता न हो
  • \n
  • ऑब्जेक्ट बनने के बाद परिवर्तनीय नहीं होना चाहिए
  • \n
\n\n
// बेहतर है स्ट्रक्चर\nstruct User {\n    let id: Int\n    var name: String\n}\n\n// क्लास — केवल अगर इनहेरिटेंस या reference semantics चाहिए\nclass ViewController: UIViewController { ... }
\n\n

वैसे, Apple डेटा मॉडल के लिए स्ट्रक्चर का उपयोग करने की सलाह देता है। यह स्विफ्ट में स्वच्छ कोड के मुख्य सिद्धांतों में से एक है।

\n\n

नियम #4: प्रोटोकॉल — आपके सबसे अच्छे दोस्त

\n\n

स्विफ्ट में प्रोटोकॉल सिर्फ इंटरफेस नहीं हैं। यह कोड को लचीला और परीक्षण योग्य बनाने का एक तरीका है। किसी विशिष्ट क्लास से बंधने के बजाय, प्रोटोकॉल के माध्यम से काम करें।

\n\n
protocol NetworkServiceProtocol {\n    func fetchData(completion: @escaping (Result<Data, Error>) -> Void)\n}\n\nclass APIService: NetworkServiceProtocol { ... }\nclass MockService: NetworkServiceProtocol { ... }
\n\n

अब आप परीक्षणों के लिए वास्तविक सेवा को मॉक से आसानी से बदल सकते हैं। और आपको दूसरे कोड को बदलने की आवश्यकता नहीं है।

ब्लॉग

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