Variable reuse is something we see in big chunks of code.
TL;DR: Don't reuse variable names. You break readability and refactor chances and gain nothing but laziness.
Problems
Readability
Refactor chances
Missed Optimization
Mutability
Garbage Collection Missed Opportunities
Solutions
Define, use and dispose variables.
Keep your Definition, Usage and Destroy variables short.
Sample Code
Wrong
class Item:
def __init__(self, name):
self.name = name
def taxesCharged(self):
return 1;
class Money:
pass
lastPurchase = Item('Soda');
# Do something with the purchase
taxAmount = lastPurchase.taxesCharged();
# Lots of stuff related to the purchase
# I drink the soda
# I cannot extract method from below without passing
# useless lastPurchase as parameter
# a few hours later..
lastPurchase = Item('Whisky');
# I bough another drink
taxAmount += lastPurchase.taxesCharged();
Right
class Item:
def __init__(self, name):
self.name = name
def taxesCharged(self):
return 1;
class Money:
pass
def buySupper():
supperPurchase = Item('Soda');
# Do something with the purchase
# Lots of stuff related to the purchase
# I drink the soda
return supperPurchase;
def buyDrinks():
# I could extract method!
# a few hours later..
drinksPurchase = Item('Whisky');
# I bough another drink
return drinksPurchase;
taxAmount = buySupper().taxesCharged() + buyDrinks().taxesCharged();
Detection
Many linters can warn us from reusing variables
Tags
- Readability
Conclusion
Reusing variables is a non-contextual copy and paste hint.
Relations
Code Smell 03 - Functions Are Too Long
Maxi Contieri ・ Oct 22 '20
More Info
Credits
Photo by Robby McCullough on Unsplash
Either way you look at it (DRY or laziness), the idea is the same: make your program flexible. When change comes (and it always does), you'll have a much easier time changing with it.
Chris Pine
Software Engineering Great Quotes
Maxi Contieri ・ Dec 28 '20
This article is part of the CodeSmell Series.
How to Find the Stinky parts of your Code
Maxi Contieri ・ May 21 '21
Last update: 2021/07/14
Top comments (0)