Elixir:
रिफैक्टरिंग

कैसे करें:

आइये एक आम एलिक्सिर पैटर्न को सजाते हैं। हम calculate_stats नामक एक फंक्शन को रिफैक्टर करेंगे जो कि ज्यादा काम करता है, इसे छोटे, पुनः प्रयोज्य टुकड़ों में तोड़कर।

defmodule Stats do
  # मूल, अपरिवर्तित कोड
  def calculate_stats(data) do
    total = Enum.sum(data)
    count = Enum.count(data)
    mean = total / count
    {mean, total}
  end
  
  # रिफैक्टर्ड कोड
  def calculate_mean(data), do: Enum.sum(data) / Enum.count(data)
  
  def calculate_total(data), do: Enum.sum(data)
  
  def calculate_stats_refactored(data) do
    mean = calculate_mean(data)
    total = calculate_total(data)
    {mean, total}
  end
end

# नमूना परिणाम
# रिफैक्टरिंग से पहले
Stats.calculate_stats([1, 2, 3])
# => {2.0, 6}

# रिफैक्टरिंग के बाद
Stats.calculate_stats_refactored([1, 2, 3])
# => {2.0, 6}

जैसा कि आप देख सकते हैं, परिणाम वही रहता है, लेकिन अब हमारे पास स्वतंत्र रूप से पुनः प्रयोज्य और परीक्षण करने योग्य मॉड्यूलर फंक्शन्स हैं।

गहराई में जाना

रिफैक्टरिंग एक नई अवधारणा नहीं है; यह सॉफ्टवेयर विकास के शुरुआती दिनों से ही प्रोग्रामिंग का एक महत्वपूर्ण हिस्सा रहा है। मार्टिन फाउलर की “रिफैक्टरिंग: एक्जिस्टिंग कोड के डिजाइन को सुधारना” जैसे प्रमुख कार्य, रिफैक्टरिंग के लिए आधारभूत प्रथाओं के साथ-साथ कब और कैसे लागू करने की अंतर्दृष्टि प्रदान करते हैं।

मैन्युअल रिफैक्टरिंग के विकल्पों में स्वचालित कोड विश्लेषण उपकरण शामिल हैं, जो रिफैक्टरिंग्स का सुझाव दे सकते हैं या यहां तक कि उन्हें प्रदर्शन भी कर सकते हैं। हालाँकि, स्वचालित उपकरण हमेशा कोड के पूरे संदर्भ को समझ नहीं पाते हैं और एक मानव समीक्षक पकड़ने वाली सूक्ष्मताओं को याद कर सकते हैं।

विशेष रूप से एलिक्सिर में कार्यान्वयन विवरणों में कार्यात्मक परिप्रेक्ष्य को समझना और पैटर्न मैचिंग, गार्ड क्लॉज़ेस, और पाइप ऑपरेटर का लाभ उठाकर स्पष्ट और संक्षिप्त कोड लिखना शामिल है। उदाहरण के लिए, रिफैक्टरिंग अक्सर जटिल इम्पेरेटिव-स्टाइल फंक्शन्स को छोटे, संयोज्य फंक्शन्स में परिवर्तित करने में शामिल होती है जो एलिक्सिर की अपरिवर्तनीयता और साइड-इफेक्ट-फ्री ऑपरेशन्स के प्राथमिकता का पालन करते हैं।

देखें भी

एलिक्सिर-विशिष्ट रिफैक्टरिंग तकनीकों पर अधिक जानकारी के लिए: