Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी रिफैक्टरिंग तकनीक:एक परिचय

यदि आप इस शब्द से परिचित नहीं हैं, तो रिफैक्टरिंग कोड की गुणवत्ता में सुधार करने का कार्य है, जो यह करता है। इससे आपके कोड के साथ काम करना बहुत आसान हो जाएगा।

इस पोस्ट में आप कुछ सामान्य रूबी रिफैक्टरिंग तकनीक सीखेंगे

आइए शुरू करें!

निकालने का तरीका

सबसे आम रिफैक्टरिंग में से एक है जिसे 'एक्सट्रैक्ट मेथड' के रूप में जाना जाता है। इस रिफैक्टरिंग में आप कुछ कोड को पुरानी विधि से नई विधि में ले जाते हैं। यह आपको वर्णनात्मक नामों वाली छोटी विधियों की अनुमति देगा।

आइए एक उदाहरण देखें:

@sold_items = %w( onions garlic potatoes )

def print_report
  puts "*** Sales Report for #{Time.new.strftime("%d/%m/%Y")} ***"
  @sold_items.each { |i| puts i }
  puts "*** End of Sales Report ***"
end

हम इस पद्धति के सबसे कुरूप भाग, वर्तमान दिनांक पीढ़ी को निकाल कर प्रारंभ कर सकते हैं।

def print_report
  puts "*** Sales Report for #{current_date} ***"
  @sold_items.each { |i| puts i }
  puts "*** End of Sales Report ***"
end

def current_date
  Time.new.strftime("%d/%m/%Y")
end

यह पहले से ही बेहतर पढ़ता है, लेकिन हम थोड़ा और आगे जा सकते हैं। आइए इस कोड को समाप्त करने के लिए कुछ और तरीके निकालें:

def print_report
  print_header
  print_items
  print_footer
end

def print_header
  puts "*** Sales Report for #{current_date} ***"
end

def current_date
  Time.new.strftime("%d/%m/%Y")
end

def print_items
  @sold_items.each { |i| puts i }
end

def print_footer
  puts "*** End of Sales Report ***"
end

हां, कोड अब लंबा हो गया है, लेकिन क्या इसे पढ़ना आसान नहीं है? छोटे तरीकों से डरो मत, वे आपके कोड के लिए अच्छे हैं।

रिफैक्टरिंग कंडीशनल

आप जटिल कंडीशनल को और अधिक पठनीय बनाने के लिए विधियों में रिफैक्टर भी कर सकते हैं।

उदाहरण :

def check_temperature
  if temperature > 30 && (Time.now.hour >= 9 && Time.now.hour <= 17)
    air_conditioner.enable!
  end
end

इसका दूसरा भाग if कथन सुपर-पठनीय नहीं है, तो चलिए इसे एक विधि में निकालते हैं:

def check_temperature
  if temperature > 30 && working_hours
    air_conditioner.enable!
  end
end

def working_hours
  Time.now.hour >= 9 && Time.now.hour <= 17
end

हमने यहां जो किया है वह हमारी स्थिति को एक वर्णनात्मक नाम देना है, जो इस कोड के भावी पाठकों (आप सहित!) के लिए चीजों को बहुत आसान बनाता है।

विधि को विधि वस्तु से बदलें

कभी-कभी आपके पास एक बड़ा तरीका होता है जो नियंत्रण से बाहर हो जाता है। इस मामले में रिफैक्टर करना मुश्किल हो सकता है क्योंकि बड़े तरीकों में कई स्थानीय चर होते हैं। एक समाधान 'विधि वस्तु' रिफैक्टरिंग का उपयोग करना है।

<ब्लॉककोट>

"बड़े तरीके वे हैं जहां कक्षाएं छिप जाती हैं।" - अंकल बॉब

आइए एक उदाहरण देखें:

require 'socket'

class MailSender
  def initialize
    @sent_messages = []
  end

  def send_message(msg, recipient = "rubyguides.com")
    raise ArgumentError, "message too small" if msg.size < 5

    formatted_msg = "[New Message] #{msg}"

    TCPSocket.open(recipient, 80) do |socket|
      socket.write(formatted_msg)
    end

    @sent_messages << [msg, recipient]

    puts "Message sent."
  end
end

sender = MailSender.new
sender.send_message("testing")

रिफैक्टरिंग करने के लिए हम एक नया वर्ग बना सकते हैं और स्थानीय चर को आवृत्ति चर में बढ़ावा दे सकते हैं। यह हमें डेटा को इधर-उधर करने की चिंता किए बिना इस कोड को और अधिक पुन:सक्रिय करने की अनुमति देगा।

<ब्लॉककोट>

अरे! अपने रूबी कौशल को बड़े पैमाने पर सुधारना चाहते हैं? मेरा सुंदर रूबी कोर्स देखें

यह है MailSender रिफैक्टरिंग के बाद कक्षा:

class MailSender
  def initialize
    @sent_messages = []
  end

  def deliver_message(message)
    send(message)
    @sent_messages << message
    puts "Message sent."
  end

  def send(msg)
    TCPSocket.open(msg.recipient, 80) { |socket| socket.write(msg.formatted_msg) }
  end
end

और यह नया वर्ग है जिसे हमने पेश किया है:

class Message
  attr_reader :msg, :recipient

  def initialize(msg, recipient = "rubyguides.com")
    raise ArgumentError, "message too small" if msg.size < 5

    @msg       = msg
    @recipient = recipient
  end

  def formatted_msg
    "[New Message] #{msg}"
  end
end

sender = MailSender.new
msg    = Message.new("testing")

sender.deliver_message(msg)

निष्कर्ष

इन रीफैक्टरिंग तकनीकों का उपयोग करने से आपको एकल उत्तरदायित्व सिद्धांत का पालन करने और अपनी कक्षाओं और विधियों को नियंत्रण में रखने में मदद मिलेगी।

अगर आपको यह लेख अच्छा लगा हो तो कृपया इसे अपने दोस्तों के साथ शेयर करें ताकि वे भी इसका आनंद उठा सकें 🙂


  1. यूनिकॉर्न nginx से कैसे बात करता है - रूबी में यूनिक्स सॉकेट्स का परिचय

    रूबी एप्लिकेशन सर्वर आमतौर पर nginx जैसे वेब सर्वर के साथ उपयोग किए जाते हैं। जब उपयोगकर्ता आपके रेल ऐप से किसी पृष्ठ का अनुरोध करता है, तो nginx एप्लिकेशन सर्वर को अनुरोध सौंपता है। लेकिन यह वास्तव में कैसे काम करता है? nginx गेंडा के साथ कैसे बात करता है? सबसे कुशल विकल्पों में से एक यूनिक्स सॉके

  1. रूबी में तंत्रिका नेटवर्क:एक डरावना परिचय

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

  1. रूबी में 9 नई सुविधाएँ 2.6

    रूबी का एक नया संस्करण नई सुविधाओं और प्रदर्शन में सुधार के साथ आ रहा है। क्या आप परिवर्तनों के साथ बने रहना चाहेंगे? आइए एक नज़र डालते हैं! अंतहीन रेंज रूबी 2.5 और पुराने संस्करण पहले से ही अंतहीन श्रेणी के एक रूप का समर्थन करते हैं (Float::INFINITY के साथ) ), लेकिन रूबी 2.6 इसे अगले स्तर पर ले