ConstructiCat Logo
CodeBust.
Browse section ▾

Замена магического числа символьной константой.

Problem

В коде используется число, которое несёт какой-то определённый смысл.

Solution

Замените это число константой с человеко-читаемым названием, объясняющим смысл этого числа.

##Example

Before
double potentialEnergy(double mass, double height) {
  return mass * height * 9.81;
}
After
static final double GRAVITATIONAL_CONSTANT = 9.81;

double potentialEnergy(double mass, double height) {
  return mass * height * GRAVITATIONAL_CONSTANT;
}

##Why Refactor

Магические числа — это числовые значения, встречающиеся в коде, но при этом неочевидно, что они означают. Данный антипаттерн затрудняет понимание программы и усложняет её рефакторинг.

Дополнительные сложности возникают, когда нужно поменять определённое магическое число. Это нельзя сделать автозаменой, так как одно и то же число может использоваться для разных целей, а значит, вам нужно будет проверять каждый участок кода, где используется это число.

##Benefits

  • Символьная константа может служить живой документацией смысла значения, которое в ней хранится.

  • Значение константы намного проще заменить, чем искать нужное число по всему коду, при этом рискуя заменить такое же число, которое в данном конкретном случае использовалось для других целей.

  • Убирает дублирование использования числа или строки по всему коду. Это особенно актуально, если значение является сложным и длинным (например, -14159, 0xCAFEBABE).

##How to Refactor

  1. Объявите константу и присвойте ей значение магического числа.

  2. Найдите все упоминания магического числа.

  3. Для всех найденных чисел проверьте, согласуется ли это магическое число с предназначением константы. Если да, замените его вашей константой. Эта проверка важна, так как одно и тоже число может означать совершенно разные вещи (в этом случае, они должны быть заменены разными константами).