Python:
Refactoring
Hoe:
Stel je hebt een stukje code dat de oppervlakte en de omtrek van een rechthoek berekent en afdrukt, gegeven de lengte en breedte. Het doet zijn werk, maar het is repetitief en een beetje rommelig.
# Originele Versie
lengte = 4
breedte = 3
# Bereken oppervlakte en omtrek
oppervlakte = lengte * breedte
omtrek = 2 * (lengte + breedte)
print("Oppervlakte:", oppervlakte)
print("Omtrek:", omtrek)
We kunnen dit refactoren door de functionaliteit in functies te encapsuleren, wat de code meer georganiseerd en herbruikbaar maakt:
# Gerefactorde Versie
def bereken_oppervlakte(lengte, breedte):
return lengte * breedte
def bereken_omtrek(lengte, breedte):
return 2 * (lengte + breedte)
# gebruik
lengte = 4
breedte = 3
print("Oppervlakte:", bereken_oppervlakte(lengte, breedte))
print("Omtrek:", bereken_omtrek(lengte, breedte))
Beide fragmenten geven hetzelfde resultaat:
Oppervlakte: 12
Omtrek: 14
Maar de gerefactorde versie is schoner en scheidt de zorgen, wat het makkelijker maakt om een berekening te updaten zonder de andere te beïnvloeden.
Diepgaande Duik
Refactoring vindt zijn oorsprong in de vroege dagen van software engineering, toen programmeurs zich realiseerden dat code kon—en zou moeten—worden verbeterd, zelfs als deze al “werkt”. Het baanbrekende boek van Martin Fowler, “Refactoring: Improving the Design of Existing Code”, formuleerde veel kernprincipes en technieken. Hij zei beroemd: “Iedere dwaas kan code schrijven die een computer kan begrijpen. Goede programmeurs schrijven code die mensen kunnen begrijpen.”
Alternatieven voor refactoring kunnen onder meer het herschrijven van code vanaf nul of het maken van kleine aanpassingen zonder systematische verbetering omvatten. Echter, refactoring is meestal kosteneffectiever dan een herschrijving en minder riskant dan ad-hoc wijzigingen. Implementatiedetails kunnen specifiek zijn voor elk programmeerparadigma; echter, objectgeoriënteerd programmeren leent zich met name goed voor refactoring, vooral met technieken zoals het extraheren van methoden (zoals onze bereken_oppervlakte
en bereken_omtrek
functies), inlining, het verplaatsen van functies tussen objecten, en het hernoemen van methoden of variabelen voor duidelijkheid.
Refactoring in Python maakt vaak gebruik van tools zoals PyCharm
, dat ingebouwde refactoring mogelijkheden heeft, of rope
, een Pythonbibliotheek die speciaal is ontworpen voor refactoring. Zorgvuldig gebruik van versiebeheer, zoals git
, tijdens refactoring wordt sterk aanbevolen om wijzigingen stapsgewijs bij te houden.
Zie Ook
Voor degenen die hongerig zijn naar meer, duik in de volgende bronnen:
- Het boek van Martin Fowler: Refactoring: Improving the Design of Existing Code
- Python refactoring met
rope
: GitHub - rope - PyCharm refactoring documentatie: Jetbrains PyCharm Refactoring Broncode
- Refactoring.guru: Refactoring and Design Patterns
- Clean Code lezingen door Uncle Bob (Robert C. Martin): Clean Code - Uncle Bob / Les 1