![]() |
VOOZH | about |
Refactoring or Code Refactoring is defined as systematic process of improving existing computer code, without adding new functionality or changing external behaviour of the code. It is intended to change the implementation, definition, structure of code without changing functionality of software. It improves extensibility, maintainability, and readability of software without changing what it actually does. Why should we refactor our code when it works fine? The goal of refactoring is not to add new functionality or remove an existing one. The main goal of refactoring is to make code easier to maintain in future and to fight technical debt. We do refactor because we understand that getting design right in first time is hard and also you get the following benefits from refactoring:
Both of the above benefits greatly improve maintainability which is required because requirements always keep changing. When do we refactor?
How to identify code to refactor? Martin Fowler proposed using “code smells” to identify when and where to refactor. Code smells are bad things done in code, just like bad patterns in the code. Refactoring and Code smells are a few techniques that help us identify problems in design and implementation. It also helps us in applying known solutions to these problems. Refactoring Techniques : There are more than 70 refactoring techniques that exist. But we will discuss only a few, more common ones.
def student():
getgrades()
# details
name = input()
class = input()
def student():
getgrades()
getdetails()
def getdetails():
name = input()
class = input()
SI = P * R * T / 100
if(SI > 100):
return SI
else:
return SI * 1.5
def calculate_SI(P, R, T):
return P * R * T / 100
SI = calculate_SI(P, R, T)
if SI > 100:
return SI
else:
return SI * 1.5
class A:
variable
This could be refactored as:
class A:
self.variable
getvariable()
setvariable()
class A:
self.variable
getvariable()
setvariable()
class PizzaDelivery:
def getgrades(self):
return 'A' if self.moretheneight() else B
def ismorethaneight(self):
return self.number > 8
class PizzaDelivery:
def getgrades(self):
return self.number > 8 ? A : B
Class A:
#...
abc()
Class B:
#...
Class A:
#...
Class B:
#...
abc()
=class Bird:
# ...
def getSpeed(self):
if self.type == EUROPEAN:
return self.getBaseSpeed()
elif self.type == AFRICAN:
return self.getBaseSpeed() - self.getLoadFactor() * self.numberOfCoconuts
elif self.type == NORWEGIAN_BLUE:
return 0 if self.isNailed else self.getBaseSpeed(self.voltage)
else:
raise Exception("Should be unreachable")
class Bird:
# ...
def getSpeed(self):
pass
class European(Bird):
def getSpeed(self):
return self.getBaseSpeed()
class African(Bird):
def getSpeed(self):
return self.getBaseSpeed() - self.getLoadFactor() * self.numberOfCoconuts
class NorwegianBlue(Bird):
def getSpeed(self):
return 0 if self.isNailed else self.getBaseSpeed(self.voltage)
# Somewhere in client code
speed = bird.getSpeed()
Note :