Hello, explorer! Today is about refactoring. Consider it as organizing your favorite toys in the toybox. We're going to learn about the Extract Method,
Rename Method,
and Substitute Algorithm
refactorings. Refactoring helps us make our code cleaner and neater while keeping the functionality the same!
Imagine having a complex map. Refactoring transforms it into simpler directions. Our code gets rearranged to make it more readable and efficient without altering what it does. Let's consider a small code snippet before and after refactoring:
Python1# Before refactoring 2def calculate(total, quantity): 3 price = total / quantity 4 tax = price * 0.2 5 total_price = price + tax 6 return total_price 7 8# After refactoring 9def calculate_total_price(total, quantity): 10 price = calculate_price(total, quantity) 11 tax = calculate_tax(price) 12 return price + tax 13 14def calculate_price(total, quantity): 15 return total / quantity 16 17def calculate_tax(price): 18 return price * 0.2
Both versions of the code do the same thing, but the latter is simpler and easier to understand!
Imagine a large recipe for a complete breakfast. The Extract Method
technique is like having separate recipes for eggs, toast, coffee, etc., instead of one large recipe. Take a look at this code:
Python1# Before refactoring 2def greet_user(username): 3 username = username.strip().lower() # Prepare the username 4 message = f'Hello, {username}!' # Prepare the message 5 return message # Return the prepared message 6 7# After refactoring 8def clean_username(username): 9 return username.strip().lower() # Returns a cleaned version of the username 10 11def greet_user(username): 12 username = clean_username(username) # Clean the username 13 message = f'Hello, {username}!' # Prepare and return the message 14 return message
Here, we moved the username preparation from greet_user
into its own function clean_username
. Nice and tidy!
Clear method names make it easy to understand our code, just as clear street names make navigating a city more accessible. Let's have a look at renaming a method:
Python1# Before refactoring 2def fx(x): 3 return 3.14 * (x ** 2) # Calculates a value that is pi times the square of x 4 5# After refactoring 6def calculate_circle_area(radius): 7 return 3.14 * (radius ** 2) # Calculates the area of a circle with a given radius
Renaming the function fx
to calculate_circle_area
makes it easier to understand its purpose.
Substitute Algorithm
involves replacing a part of a code (an algorithm) with a simpler one, analogous to discovering a faster route to school. Here's an example:
Python1# Before refactoring 2def find_smallest(numbers): 3 smallest = None 4 for num in numbers: 5 # Assigns the first value as the smallest one and then checks the next ones 6 if smallest is None or num < smallest: 7 smallest = num 8 return smallest 9 10# After refactoring 11def find_smallest(numbers): 12 return min(numbers) # Returns the smallest number from 'numbers'
Just like the min
function in Python, it performs the same job as our previous function, but with less code.
Great work! We've learned how to use the Extract Method,
Rename Method,
and Substitute Algorithm
to keep our code clean and efficient. Now, it's time for some hands-on practice with real examples. Remember, practice makes perfect. Let's do some refactoring!