Stepping into Refactoring Code

Welcome to our captivating session on refactoring, a powerful tool for tidying up code, much like organizing a messy toy box or finding a faster route to school.

Each line of code is as essential as a brick in a building; clumsy code may result in an unstable structure. Today, we'll focus on enhancing the readability, maintainability, and performance of our code through refactoring.

Recapping Crucial Concepts

Let's briefly revisit a few key concepts:

  • Code Smells: Indicators that our code needs refactoring, akin to clutter calling for cleanup.

  • Refactoring Techniques: We've familiarized ourselves with Extract Method, Rename Method, and Substitute Algorithm techniques in earlier lessons.

  • OOP in Refactoring: We've learned how to leverage Object-Oriented Programming principles to enhance our code's structure.

  • Code Decoupling and Modularization: Methods to make code easier to manage by minimizing dependencies.

We'll use these concepts as guiding stars as we traverse the cosmos of refactoring.

Practice Problem 1: Taming a Complex Function

We'll start with rewriting a complex game score computation function. Let's look at it:

Ruby
def compute_score(player, monsters)
  score = 0
  monsters.each do |monster|
    if player.power > monster
      score += player.power - monster
    else
      score -= player.power - monster
    end
  end
  score
end

The parts player.power > monster and player.power - monster recur in this function, indicating room for refactoring. We'll apply the Extract Method and Rename Method to untangle this:

  • We'll extract the scoring logic into a separate method, score_change.
  • We'll rename the original method to compute_game_score.

With these adjustments, our improved code might look something like this:

# New method to calculate score changes.
def score_change(power, monster)
  if power > monster
    power - monster
  else
    monster - power
  end
end

# Refactored method to calculate the game score.
def compute_game_score(player, monsters)
  score = 0
  monsters.each do |monster|
    score += score_change(player.power, monster)
  end
  score
end

This refactoring has simplified the function and made it easier to modify in the future.

Practice Problem 2: Refactoring with OOP and Code Decoupling
Sign up
Join the 1M+ learners on CodeSignal
Be a part of our community of 1M+ users who develop and demonstrate their skills on CodeSignal