Ruby:
রিফ্যাক্টরিং

কিভাবে:

আসুন আমরা একটি উদাহরণ দেখি যেখানে একটি Ruby মেথডের রিফ্যাক্টরিং হয়েছে যা বর্গের যোগফল গণনা করে।

রিফ্যাক্টরিং আগে:

def sum_of_squares(numbers)
  sum = 0
  numbers.each do |number|
    square = number * number
    sum += square
  end
  sum
end

puts sum_of_squares([1, 2, 3])  # আউটপুট: 14

রিফ্যাক্টরিং পরে:

def sum_of_squares(numbers)
  numbers.map { |number| number**2 }.sum
end

puts sum_of_squares([1, 2, 3])  # আউটপুট: 14

পুনঃগঠিত সংস্করণটি Ruby Enumerables ব্যবহার করে একই লজিকটি আরও সংক্ষেপে এবং স্পষ্টভাবে প্রকাশ করে। map পদ্ধতিটি প্রতিটি উপাদানকে রূপান্তর করে এবং sum তাদের মান একত্রিত করে, ম্যানুয়াল লুপ ব্যবস্থাপনা এবং চলক অর্পণের প্রয়োজনকে সরিয়ে দেয়।

গভীর ডুব

রিফ্যাক্টরিং-এর একটি সমৃদ্ধ ঐতিহাসিক প্রেক্ষাপট রয়েছে, যা সফ্টওয়্যার বিকাশের প্রাথমিক অনুশীলনে ফিরে যায়। প্রথম উল্লেখগুলি ১৯৯০ এর দশকে ফিরে যেতে পারে, মার্টিন ফাওলারের “রিফ্যাক্টরিং: ইমপ্রুভিং দ্য ডিজাইন অফ এক্সিসটিং কোড” নামক বইতে রিফ্যাক্টরিংয়ের জন্য প্যাটার্নের একটি ক্যাটালগ সরবরাহ করে গুরুত্বপূর্ণ অবদান রাখা হয়েছে। তারপর থেকে, রিফ্যাক্টরিং দক্ষ বিকাশ অনুশীলনের একটি কোণস্টোন হয়ে উঠেছে।

রিফ্যাক্টরিংয়ের বিকল্পগুলি সম্পর্কে যখন আমরা কথা বলি, আমাদের হয় ‘রিরাইটিং’ মতো ভিন্ন পদ্ধতি বিবেচনা করতে হবে, যেখানে আপনি পুরোনো সিস্টেমটিকে অংশে বা সম্পূর্ণরূপে প্রতিস্থাপন করেন অথবা ‘কোড রিভিউস’ এবং ‘পেয়ার প্রোগ্রামিং’ মতো অনুশীলন গ্রহণ করেন যা ধীরে ধীরে কোডের গুণমান উন্নতি করে। তবে, এগুলো রিফ্যাক্টরিংয়ের প্রতিস্থাপন নয়; বরং, এগুলি প্রক্রিয়াটির পরিপূরক।

বাস্তবায়নের দিক থেকে, Ruby অসামান্য এবং প্রকাশযোগ্য সিনট্যাক্স সরবরাহ করে যা প্রায়শই রিফ্যাক্টরিংয়ের পরে সংক্ষিপ্ত, পাঠযোগ্য কোডের ফলাফল দেয়। মূল নীতিগুলি অন্তর্ভুক্ত ড্রাই (ডোন্ট রিপিট ইয়োরসেলফ), অর্থপূর্ণ নাম ব্যবহার করা, মেথডগুলি সংক্ষিপ্ত এবং একক কাজে মনোনিবেশ করা, এবং Ruby এর Enumerable মডিউল কার্যকরভাবে ব্যবহার করা, যেমন উদাহরণে দেখানো হয়েছে উপরে। রুবোকপের মতো স্বয়ংক্রিয় টুলগুলি প্রোগ্রামারদেরকে কোডের সেই স্থানগুলিতে নজর দেয়ার সহায়তা করতে পারে যা রিফ্যাক্টরিং থেকে উপকৃত হতে পারে।

আরও দেখুন

Ruby-তে রিফ্যাক্টরিং সম্পর্কে আরও গভীরে যেতে, এই সংস্থানগুলো দেখুন: