C++:
रिफैक्टरिंग

कैसे:

कल्पना कीजिए आपके पास एक फंक्शन है जो थोड़ा बहुत काम कर रहा है, जैसे इस असुधारी विधि जो एक ऑब्जेक्ट को आरम्भ करती है और साथ ही लॉगिंग भी करती है:

#include <iostream>

class Widget {
public:
    void init(bool verbose) {
        // प्रारम्भिकता तर्क
        // ...

        // विस्तृत लॉगिंग
        if (verbose) {
            std::cout << "Widget initialized!" << std::endl;
        }
    }
};

// उपयोग:
Widget w;
w.init(true);

आउटपुट:

Widget initialized!

इसे स्वच्छ, अधिक केंद्रित विधियों में रिफैक्टर करना इस प्रकार दिख सकता है:

#include <iostream>

class Widget {
public:
    void init() {
        // केवल प्रारम्भिकता तर्क
        // ...
    }

    void logInitialization() const {
        std::cout << "Widget initialized!" << std::endl;
    }
};

// उपयोग:
Widget w;
w.init();
w.logInitialization();

इस बदलाव ने प्रोग्राम को क्या करता है इसमें कोई बदलाव नहीं किया है लेकिन Widget क्लास को अधिक मॉड्यूलर बना दिया है और इसके उपयोग को अधिक स्पष्ट बना दिया है।

गहराई से जाँच

जैसा कि हम आज रिफैक्टरिंग के संकल्पना को जानते हैं, इसकी जड़ें 1980s के छोटे टॉक प्रोग्रामिंग समुदायों में हैं और 1999 में मार्टिन फाउलर की पुस्तक “रिफैक्टोरिंग: इम्प्रूविंग द डिज़ाइन ऑफ़ एग्ज़िस्टिंग कोड” द्वारा भारी मात्रा में लोकप्रियीकृत की गई थी। आज, रिफैक्टरिंग आधुनिक सॉफ़्टवेयर विकास का एक मुख्य भाग है, जो एगाइल और टीडीडी (टेस्ट-ड्रीवन डेवलपमेंट) जैसी विभिन्न विकास

पद्धतियों में एकीकृत है।

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

रिफैक्टरिंग पर कार्यान्वयन विवरण काफी विस्तृत हो सकते हैं। ऐसे कई ‘कोड गंध’ हैं जो रिफैक्टर के लिए प्रेरित कर सकते हैं, जैसे लंबे तरीके, बड़ी कक्षाएं, या दोहराया गया कोड। ऑटोमेटेड टूल्स मौजूद हैं जो रिफैक्टरिंग में सहायता कर सकते हैं, जैसे कि C++ के लिए “Clang-Tidy” जो मुद्दों को देख सकते हैं और कुछ सुधार भी लागू कर सकते हैं।

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

देखने के लिए भी

रिफैक्टरिंग के गहरे समझ के लिए और अधिक उदाहरणों को देखने के लिए, आप चाहेंगे:

  • मार्टिन फाउलर का क्लासिक पाठ “रिफैक्टोरिंग: इम्प्रूविंग द डिज़ाइन ऑफ़ एग्ज़िस्टिंग कोड” मौलिक विचारों और रणनीतियों के लिए।
  • ऑटोमेटेड रिफैक्टोरिंग समर्थन में C++ के लिए Clang-Tidy दस्तावेज़ीकरण https://clang.llvm.org/extra/clang-tidy/ पर।
  • माइकल फीदर्स द्वारा “वर्किंग इफ़ेक्टिवली विथ लेगेसी कोड”, जो कम-से-कम पर्फेक्ट मौजूदा कोडबेस के संदर्भ मेंसुरक्षित रूप से रिफैक्टरिंग करने की तकनीकी प्रदान करता है।