Codementor Events

Code Smell 02 - Constants and Magic Numbers

Published Nov 13, 2021
Code Smell 02 - Constants and Magic Numbers

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
  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
<? function energy($mass) { return $mass * (300000 ^ 2);
}
<? function energy($mass) { return $mass * (LIGHT_SPEED_KILOMETERS_OVER_SECONDS ^ 2);
}

Many linters can detect number literal in attributes and methods.

Tags

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

This article is part of the CodeSmell Series.

Discover and read more posts from Maxi Contieri
get started
post commentsBe the first to share your opinion
Show more replies