Swift में क्लीन कोड: शुरुआती लोगों के लिए सिद्धांत और उदाहरण
\n\nप्रत्येक iOS या macOS डेवलपर को देर-सबेर एक समस्या का सामना करना पड़ता है: जो कोड कल ठीक काम कर रहा था, वह आज अपठनीय हो जाता है। यह Swift भाषा की गलती नहीं है - यह क्लीन कोड के सिद्धांतों की उपेक्षा का परिणाम है। क्लीन कोड केवल सौंदर्यशास्त्र नहीं है। यह प्रोजेक्ट की रखरखाव क्षमता, डिबगिंग के समय को कम करने और टीम में आरामदायक काम करने का आधार है। इस लेख में, हम Swift उदाहरणों के साथ क्लीन कोड के प्रमुख सिद्धांतों पर चर्चा करेंगे, जो आपको ऐसा कोड लिखने में मदद करेंगे जो न केवल कंप्यूटर बल्कि लोगों के लिए भी समझने योग्य हो।
\n\n1. नामकरण: वेरिएबल, कॉन्स्टेंट और फ़ंक्शन
\n\nपहला और सबसे महत्वपूर्ण सिद्धांत - नाम को "क्यों?" प्रश्न का उत्तर देना चाहिए, न कि "कैसे?" का। Swift में, सख्त टाइपिंग के कारण, आप नाम में प्रकार को छोड़ सकते हैं, लेकिन इरादे को नहीं।
\n\nखराब उदाहरण:
\nvar d: Double = 3.14\nvar arr = [String]()\nfunc calc(a: Double, b: Double) -> Double {\n return a * b\n}\n\nअच्छा उदाहरण (क्लीन कोड):
\nlet piValue: Double = 3.14159\nvar userNames: [String] = []\nfunc calculateRectangleArea(width: Double, height: Double) -> Double {\n return width * height\n}\n\nSwift में नामकरण के नियम:
\n- \n
- वेरिएबल और फ़ंक्शन के लिए camelCase का उपयोग करें। \n
- संक्षिप्ताक्षरों से बचें (
btn→submitButton)। \n - बूलियन वेरिएबल के लिए उपसर्ग
is,has,shouldका उपयोग करें (उदाहरण के लिए,isUserLoggedIn)। \n - फ़ंक्शन के नाम क्रिया से शुरू होने चाहिए:
fetchData(),saveToCache()। \n
2. फ़ंक्शन: एक कार्य - एक फ़ंक्शन
\n\nएकल जिम्मेदारी का सिद्धांत (Single Responsibility) न केवल क्लास पर बल्कि फ़ंक्शन पर भी लागू होता है। यदि कोई फ़ंक्शन एक से अधिक काम करता है - तो उसे विभाजित करने की आवश्यकता है।
\n\nखराब उदाहरण: फ़ंक्शन सब कुछ एक साथ करता है
\nfunc processUserData(user: User) {\n // वैलिडेशन\n guard user.email.contains("@") else { return }\n // डेटाबेस में सेव करना\n Database.shared.save(user)\n // नोटिफिकेशन भेजना\n NotificationCenter.default.post(name: .userDidRegister, object: nil)\n // UI अपडेट करना\n DispatchQueue.main.async {\n self.label.text = "स्वागत है, \\(user.name)"\n }\n}\n\nअच्छा उदाहरण: छोटे फ़ंक्शन में विभाजन
\nfunc registerUser(_ user: User) {\n guard validateUser(user) else { return }\n saveUserToDatabase(user)\n postRegistrationNotification()\n updateUI(for: user)\n}\n\nprivate func validateUser(_ user: User) -> Bool {\n return user.email.contains("@") && !user.name.isEmpty\n}\n\nprivate func saveUserToDatabase(_ user: User) {\n Database.shared.save(user)\n}\n\nprivate func postRegistrationNotification() {\n NotificationCenter.default.post(name: .userDidRegister, object: nil)\n}\n\nprivate func updateUI(for user: User) {\n DispatchQueue.main.async {\n self.welcomeLabel.text = "स्वागत है, \\(user.name)"\n }\n}\n\nसुझाव: यदि आप फ़ंक्शन के लिए कोई छोटा नाम नहीं सोच सकते हैं, तो संभवतः वह बहुत अधिक काम कर रहा है।
\n\n3. टिप्पणियाँ: कम बेहतर है, लेकिन सटीक
\n\nक्लीन कोड में, टिप्पणियाँ खराब कोड का संकेत हैं। अच्छे कोड को स्वयं का दस्तावेजीकरण करना चाहिए। हालांकि, अपवाद हैं: जटिल व्यावसायिक तर्क, लीगेसी के साथ काम करना या सार्वजनिक API।
\n\nअनावश्यक टिप्पणी (खराब):
\n// काउंटर को 1 से बढ़ाएँ\ncounter += 1\n\nउपयोगी टिप्पणी (अच्छा):
\n// मुद्रा के साथ काम करते समय राउंडिंग त्रुटियों से बचने के लिए Decimal का उपयोग करें\nlet price = Decimal(string: "19.99") ?? .zero\n\nटिप्पणियों के साथ काम करने के नियम:
\n- \n
- स्पष्ट बातें न लिखें - कोड स्वयं पढ़ा जाता है। \n
- सेक्शन को चिह्नित करने के लिए
// MARK: -का उपयोग करें \n