A method makes calculations with lots of numbers without describing their semantics.
TL;DR: Avoid Magic numbers without explanation. We don't know their source and we are very afraid of changing then.
Problems
- Coupling
- Low testability
- Low readability
Solutions
1) Rename the constant with a semantic and name (meaningful and intention revealing).
2) Replace constants with parameters, so you can mock them from outside.
3) The constant definition is often a different object than the constant (ab)user.
Examples
- Algorithms Hyper Parameters
Sample Code
Wrong
<?
function energy($mass) {
return $mass * (300000 ^ 2);
}
Right
<?
function energy($mass) {
return $mass * (LIGHT_SPEED_KILOMETERS_OVER_SECONDS ^ 2);
}
Detection
Many linters can detect number literal in attributes and methods.
Tags
- Hard coded
- Constants
More info
Credits
Photo by Kristopher Roller on Unsplash
In a purely functional program, the value of a [constant] never changes, and yet, it changes all the time! A paradox!
Joel Spolsky
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/05/31