Refactoring 002 — Extract Method
Find some code snippets that can be grouped and called atomically.
TL;DR: Group your cohesive sentences together
Problems Addressed 😔
Readability
Complexity
Code Reuse
Related Code Smells 💨
Code Smell 03 - Functions Are Too Long
Code Smell 05 - Comment Abusers
Code Smell 18 - Static Functions
Code Smell 107 - Variables Reuse
Code Smell 154 - Too Many Variables
Code Smell 169 - Glued Methods
Steps 👣
Move the code fragment to a separate new method
Replace the old code with a call to the recently created method.
Sample Code 📖
Before 🚨
object Ingenuity {
fun moveFollowingPerseverance() {
// take Off
raiseTo(10 feet)
// move forward to perseverance
while (distanceToPerseverance() < 5 feet) {
moveForward()
}
// land
raiseTo(0 feet)
}
After 👉
object Ingenuity {
// 1. Move the code fragment to a separate new method
private fun takeOff() {
raiseTo(10 feet)
}
// 1. Move the code fragment to a separate new method
private fun moveForwardToPerseverance() {
while (distanceToPerseverance() < 5 feet) {
moveForward()
}
}
// 1. Move the code fragment to a separate new method
private fun land() {
raiseTo(0 feet)
}
fun moveFollowingPerseverance() {
takeOff()
// 2. Replace the old code with a call
// to the recently created method
moveForwardToPerseverance()
// 2. Replace the old code with a call
// to the recently created method
land()
// 2. Replace the old code with a call
// to the recently created method
}
}
Type 📝
[X] Automatic
Many IDEs support this safe refactoring
Safety 🛡️
This is a safe refactoring.
Why is the Code Better? ✨
Code is more compact and easier to read.
Functions can be reused.
Algorithms and functions are more declarative hiding implementative details on extracted code.
Limitations ⚠️
Does not work well if you use meta-programming anti-pattern.
Tags 🏷️
Complexity
Readability
Level 🔋
[X] Beginner
Related Refactorings 🔄
Refactoring 010 - Extract Method Object
Refactoring 025 - Decompose Regular Expressions
TL;DR: You can break down a complex validation regex into smaller parts to test each part individually and report accurate errors.
Refactoring 007 - Extract Class
Refactoring 003 - Extract Constant
Refactoring 012 - Reify Associative Arrays
TL;DR: Convert your key/value into full behavioral objects
Refactoring 005 - Replace Comment with Function Name
Move method to a new class
Credits 🙏
This article is part of the Refactoring Series
How to Improve your Code With easy Refactorings
Refactorings are amazing to grow and improve our code