Magic Strings

August 2021

One piece of programming advice is that one shouldn't use numbers in code unless they're stored in a variable or constant. Using a number as a bare value – often called a "magic number" – gives no context as to why that number is being used.

totalWidth = getSize() + 272;

Why 272? Why not 113? Instead, one is encouraged to use constants.

final int WINDOW_PADDING = 272;
totalWidth = getSize() + WINDOW_PADDING;

This is better, because it prevents typos. But simply using a constant doesn't ensure readability. In string variables, there's an antipattern I'm calling magic strings.

final String USE_FOOBAR_SYSTEM = "use_foobar_system";

While the value is stored in a variable, the variable name merely repeats this value. The name doesn't help the reader understand what it's there for. These variables are no better than a numeric constant like:


The code does use a constant, but its name doesn't explain why the constant is there. Better to give it a name that explains what it's used for.

final String FOOBAR_SYSTEM_FEATURE_FLAG_NAME = "use_foobar_system";

This way, the name alone clearly indicates what it's used for. And clarity is a great goal to have in programming. As Harold Abelson and Gerald Jay Sussman have said,

…programs must be written for people to read, and only incidentally for machines to execute.