Swift कोड का रिफैक्टरिंग: कब ज़रूरी है और इसे सही तरीके से कैसे करें

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

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

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

आपका कोड काम करता है, लेकिन यह इसे न छूने का कारण नहीं है

\n\n

आपने एक एप्लिकेशन लिखा, यह चलता है, ग्राहक खुश हैं, बिल्ड क्रैश नहीं होते। ऐसा लगता है कि आप आराम कर सकते हैं और नई सुविधाओं पर काम कर सकते हैं। लेकिन कोड बेस के अंदर एक फ्रेंकस्टीन का राक्षस है: 300 लाइनों के तरीके, कॉपी-पेस्ट, उलझा हुआ तर्क और पूरे प्रोजेक्ट में बिखरी हुई जादुई संख्याएँ। यदि आपने कम से कम एक बार सोचा है "इस क्लास को न छूना ही बेहतर है, वरना सब कुछ टूट जाएगा" — तो Swift कोड का रिफैक्टरिंग आपके लिए सिर्फ एक सिफारिश नहीं, बल्कि एक जीवन की आवश्यकता है।

\n\n

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

\n\n

रिफैक्टरिंग क्या है और यह क्या नहीं है

\n\n

बुनियादी बातों से शुरू करते हैं। Swift कोड का रिफैक्टरिंग — बाहरी व्यवहार को बदले बिना प्रोग्राम की आंतरिक संरचना को बदलने की प्रक्रिया है। आप नई सुविधाएँ नहीं जोड़ते, बग्स को ठीक नहीं करते (हालाँकि आप अक्सर रास्ते में उन्हें ढूंढ लेते हैं)। आप बस कोड को साफ, समझने योग्य और रखरखाव में आसान बनाते हैं।

\n\n

यह समझना महत्वपूर्ण है: रिफैक्टरिंग ≠ शुरू से फिर से लिखना। यदि आप पूरे प्रोजेक्ट को फेंक कर SwiftUI और TCA आर्किटेक्चर के साथ फिर से शुरू करना चाहते हैं — यह रिफैक्टरिंग नहीं है, यह फिर से लिखना है। और फिर से लिखना, जैसा कि अनुभव बताता है, 80% मामलों में विफलता में समाप्त होता है।

\n\n

Swift कोड का रिफैक्टरिंग कब करें: तीन पक्के संकेत

\n\n

1. तीन का नियम (Rule of Three)

\n

यदि आप तीसरी बार कोड का एक ही टुकड़ा कॉपी कर रहे हैं — यह एक संकेत है। दूसरी बार नहीं, बल्कि तीसरी बार। पहली बार — ठीक है, आपने समस्या हल कर दी। दूसरी बार — पहले से ही संदिग्ध है, लेकिन जल्दबाजी को दोष दिया जा सकता है। तीसरी बार — बस, एक सामान्यीकृत समाधान लिखें।

\n\n
// बुरा: कॉपी-पेस्ट\nfunc formatUserName(_ name: String) -> String {\n    return name.trimmingCharacters(in: .whitespaces).capitalized\n}\n\nfunc formatProductName(_ name: String) -> String {\n    return name.trimmingCharacters(in: .whitespaces).capitalized\n}\n\n// अच्छा: एकीकृत विधि\nfunc formatDisplayName(_ name: String) -> String {\n    return name.trimmingCharacters(in: .whitespaces).capitalized\n}
\n\n

2. लंबी विधियों की "बदबू"

\n

यदि कोई विधि फोन की स्क्रीन पर फिट नहीं होती — यह एक समस्या है। Swift समुदाय में, प्रति विधि 15-20 लाइनों पर ध्यान केंद्रित करने की प्रथा है। बेशक, अपवाद हैं (जटिल गणनाएँ), लेकिन 95% मामलों में, एक लंबी विधि इस बात का संकेत है कि वह बहुत अधिक काम कर रही है।

\n\n

3. परीक्षण नरक में बदल जाता है

\n

जब एक फ़ंक्शन का परीक्षण करने के लिए 5 सेवाओं को मॉक करना, डेटाबेस सेट करना और डिस्क से फ़ाइल पढ़ना पड़ता है — यह एक लाल झंडा है। Swift कोड का रिफैक्टरिंग आपके कोड बेस को अधिक परीक्षण योग्य बनाना चाहिए। यदि अभी परीक्षण लिखना दर्दनाक है — तो इसका मतलब है कि आर्किटेक्चर बदलाव माँग रहा है।

\n\n

Swift रिफैक्टरिंग के व्यावहारिक उदाहरण

\n\n

आइए वास्तविक स्थितियों को देखें जिनका सामना हर iOS डेवलपर करता है।

\n\n

उदाहरण 1: जादुई संख्याओं से छुटकारा पाना

\n

जादुई संख्याएँ संख्यात्मक शाब्दिक हैं जिनका मान संदर्भ के बिना स्पष्ट नहीं है। वे कोड को नाजुक और अपठनीय बनाती हैं।

\n\n
// रिफैक्टरिंग से पहले\nfunc calculateDiscount(price: Double) -> Double {\n    if price > 1000 {\n        return price * 0.15\n    } else if price > 500 {\n        return price * 0.1\n    } else {\n        return price * 0.05\n    }\n}\n\n// रिफैक्टरिंग के बाद\nprivate struct DiscountConstants {\n    static let premiumThreshold: Double = 1000\n    static let standardThreshold: Double = 500\n    static let premiumRate: Double = 0.15\n    static let standardRate: Double = 0.10\n    static let basicRate: Double = 0.05\n}\n\nfunc calculateDiscount(price: Double) -> Double {\n    switch price {\n    case _ where price > DiscountConstants.premiumThreshold:\n        return price * DiscountConstants.premiumRate\n    case _ where price > DiscountConstants.standardThreshold:\n        return price * DiscountConstants.s                

ब्लॉग

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