DEV Community

Cover image for Code Smell 83 - Variables Reassignment
Maxi Contieri
Maxi Contieri

Posted on • Originally published at maximilianocontieri.com

Code Smell 83 - Variables Reassignment

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

  1. Define, use and dispose variables.

  2. 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(); 
Enter fullscreen mode Exit fullscreen mode

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(); 
Enter fullscreen mode Exit fullscreen mode

Detection

Many linters can warn us from reusing variables

Tags

  • Readability

Conclusion

Reusing variables is a non-contextual copy and paste hint.

Relations

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


This article is part of the CodeSmell Series.

Last update: 2021/07/14

Top comments (0)