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:
php1// Before refactoring 2function calculate($total, $quantity) { 3 $price = $total / $quantity; 4 $tax = $price * 0.2; 5 $totalPrice = $price + $tax; 6 return $totalPrice; 7} 8 9// After refactoring 10function calculateTotalPrice($total, $quantity) { 11 $price = calculatePrice($total, $quantity); 12 $tax = calculateTax($price); 13 return $price + $tax; 14} 15 16function calculatePrice($total, $quantity) { 17 return $total / $quantity; 18} 19 20function calculateTax($price) { 21 return $price * 0.2; 22}
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:
php1// Before refactoring 2function greetUser($username) { 3 $username = strtolower(trim($username)); // Prepare the username 4 $message = "Hello, " . $username . "!"; // Prepare the message 5 return $message; // Return the prepared message 6} 7 8// After refactoring 9function cleanUsername($username) { 10 return strtolower(trim($username)); // Returns a cleaned version of the username 11} 12 13function greetUser($username) { 14 $username = cleanUsername($username); // Clean the username 15 $message = "Hello, " . $username . "!"; // Prepare and return the message 16 return $message; 17}
Here, we moved the username preparation from greetUser
into its own function, cleanUsername
. 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:
php1// Before refactoring 2function fx($x) { 3 return 3.14 * ($x * $x); // Calculates a value that is pi times the square of x 4} 5 6// After refactoring 7function calculateCircleArea($radius) { 8 return 3.14 * ($radius * $radius); // Calculates the area of a circle with a given radius 9}
Renaming the function fx
to calculateCircleArea
makes it easier to understand its purpose.
A Substitute Algorithm
involves replacing a part of the code (an algorithm) with a simpler one, analogous to discovering a faster route to school. Here's an example:
php1// Before refactoring 2function findSmallest($numbers) { 3 $smallest = PHP_INT_MAX; 4 foreach ($numbers as $num) { 5 if ($num < $smallest) { 6 $smallest = $num; 7 } 8 } 9 return $smallest; 10} 11 12// After refactoring 13function findSmallest($numbers) { 14 return min($numbers); // Returns the smallest number from 'numbers' 15}
Using min($numbers)
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!