Code Smell 249 - Constants as Numbers
Maxi Contieri
Posted on April 25, 2024
You map concepts to optimized numbers
TL;DR: Use real-world constants as constants
Problems
Bijection Violation
Debugging
Premature Optimization
Maintainability
Type Safety
Limited Extensibility
Solutions
Use descriptive string constants
Use Enums
Create A Polymorphic Hierarchy
Context
Numeric constants representing real-world concepts lack readability and make your code harder to understand.
It's not clear what each number represents.
if you need to add more constants in the future or change the order, you'll have to update all occurrences of these numeric constants manually.
New values can introduce errors and make maintenance more difficult.
Saving attributes as integers to improve the persistence performance or space is a clear signal of Premature Optimization.
Sample Code
Wrong
public const FORMAT_JPG = 1;
public const FORMAT_GIF = 2;
public const FORMAT_PNG = 3;
Right
public const string FORMAT_JPG = "JPG";
public const string FORMAT_GIF = "GIF";
public const string FORMAT_PNG = "PNG";
// OR
public enum ImageFormat
{
JPG,
GIF,
PNG
}
Detection
[X] Semi-Automatic
You can tell your linters to warn you about this usage, but they can show you some false positives.
Tags
- Readability
Level
[X] Beginner
AI Generation
No models create this premature optimization problem when prompted to list constants.
AI Detection
ChatGPT and Gemini detected this as a mistake.
Conclusion
After this correction, your code will be cleaner readable, and self-explanatory for debugging.
You can read it and It's clear what each constant represents.
If you need to add more formats or change the order, you should update the enumeration definition without affecting the rest of the code.
IDEs with auto-completion and error checking will give you better support to work with enums.
Relations
Code Smell 02 - Constants and Magic Numbers
Maxi Contieri ・ Oct 21 '20
Code Smell 110 - Switches With Defaults
Maxi Contieri ・ Dec 15 '21
Code Smell 20 - Premature Optimization
Maxi Contieri ・ Nov 8 '20
More Info
How to Get Rid of Annoying IFs Forever
Maxi Contieri ・ Nov 9 '20
Disclaimer
Code Smells are my opinion.
Credits
Photo by Markus Krisetya on Unsplash
Forget this world and all its troubles and if possible its multitudinous Charlatans - everything in short but the Enchantress of Numbers.
Ada Lovelace
Software Engineering Great Quotes
Maxi Contieri ・ Dec 28 '20
This article is part of the CodeSmell Series.
Posted on April 25, 2024
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.
Related
November 14, 2024