Swift में Clean Code: सिद्धांत और व्यावहारिक उदाहरण

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

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

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

Swift में Clean Code: सिद्धांत और व्यावहारिक उदाहरण

\n\n

Clean Code (स्वच्छ कोड) सिर्फ एक फैशनेबल शब्द नहीं है, बल्कि एक पेशेवर डेवलपर का मूलभूत कौशल है। Swift (iOS/macOS) इकोसिस्टम में कोड की गुणवत्ता सीधे डेवलपमेंट की गति, बग्स की संख्या और प्रोजेक्ट मेंटेनेंस को प्रभावित करती है। इस लेख में हम Swift में Clean Code के मुख्य सिद्धांतों को समझेंगे और व्यावहारिक उदाहरणों के साथ उनका कार्यान्वयन दिखाएंगे।

\n\n

1. नामकरण: डोमेन की भाषा में बात करें

\n\n

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

\n\n

खराब उदाहरण:

\n
func calc(a: [String: Any]) -> Double {\n    var x = 0.0\n    for (_, v) in a {\n        if let n = v as? Double {\n            x += n\n        }\n    }\n    return x\n}
\n\n

अच्छा उदाहरण (Clean Code):

\n
func calculateTotalPrice(of products: [Product]) -> Double {\n    return products.reduce(0) { $0 + $1.price }\n}
\n\n

Swift में नामकरण के सिद्धांत:

\n
    \n
  • स्पष्टता संक्षिप्तता से अधिक महत्वपूर्ण है: remove(at:), rem(at:) से बेहतर है।
  • \n
  • टाइप के लिए संज्ञा का उपयोग करें: UserViewController, NetworkManager।
  • \n
  • फंक्शन के लिए क्रिया का उपयोग करें: fetchData(), saveToCache()।
  • \n
  • बूलियन वेरिएबल: is, has, should से शुरू करें — isEnabled, hasContent।
  • \n
  • संक्षिप्त रूपों से बचें: bgColor के बजाय backgroundColor।
  • \n
\n\n

2. Swift में एकल उत्तरदायित्व का सिद्धांत (SRP)

\n\n

प्रत्येक क्लास, स्ट्रक्चर या फंक्शन में बदलाव का केवल एक ही कारण होना चाहिए। iOS डेवलपमेंट में यह ViewController के लिए विशेष रूप से प्रासंगिक है, जो अक्सर "गॉड ऑब्जेक्ट" बन जाते हैं।

\n\n

SRP का उल्लंघन (सामान्य ViewController):

\n
class ProfileViewController: UIViewController {\n    @IBOutlet weak var nameLabel: UILabel!\n    @IBOutlet weak var avatarImageView: UIImageView!\n    \n    override func viewDidLoad() {\n        super.viewDidLoad()\n        // डेटा लोड करना\n        let url = URL(string: "https://api.example.com/user")!\n        let data = try! Data(contentsOf: url)\n        let json = try! JSONSerialization.jsonObject(with: data) as! [String: Any]\n        nameLabel.text = json["name"] as? String\n        \n        // अवतार लोड करना\n        let imageUrl = URL(string: json["avatar"] as! String)!\n        let imageData = try! Data(contentsOf: imageUrl)\n        avatarImageView.image = UIImage(data: imageData)\n        \n        // कैश में सेव करना\n        UserDefaults.standard.set(json, forKey: "cachedUser")\n    }\n}
\n\n

SRP का पालन करते हुए रिफैक्टरिंग:

\n
// 1. नेटवर्किंग के लिए अलग सर्विस\nclass UserNetworkService {\n    func fetchUser(completion: @escaping (Result<User, Error>) -> Void) {\n        // ... नेटवर्क लॉजिक\n    }\n}\n\n// 2. कैश मैनेजमेंट के लिए अलग क्लास\nclass UserCacheManager {\n    func saveUser(_ user: User) {\n        // ... कैशिंग लॉजिक\n    }\n}\n\n// 3. बिजनेस लॉजिक के लिए ViewModel\nclass ProfileViewModel {\n    private let networkService = UserNetworkService()\n    private let cacheManager = UserCacheManager()\n    \n    func loadProfile(completion: @escaping (User) -> Void) {\n        networkService.fetchUser { [weak self] result in\n            switch result {\n            case .success(let user):\n                self?.cacheManager.saveUser(user)\n                completion(user)\n            case .failure:\n                // एरर होने पर कैश से लोड करें\n                if let cachedUser = self?.cacheManager.lo                

ब्लॉग

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