Магические числа — пример плохих практик в программировании. Из этой статьи вы узнаете, почему от них надо избавляться и как это делать.
Что такое магические числа
В программировании магическими называют числа в коде, смысл которых сложно понять. Взгляните на пример.
// показываем пользователю окончательную цену товара
const showBruttoPrice = (nettoPrice) => {
const bruttoPrice = nettoPrice * 1.20;
return bruttoPrice;
};
Это пример магического числа, потому что невозможно однозначно ответить на вопрос, почему для вычисления bruttoPrice
нужно умножить nettoPrice
на 1.20
. Смысл числа 1.20
приходится восстанавливать по контексту. Но при работе с большими приложениями в реальной разработке это не всегда возможно.
Магические числа не ломают код. В примере выше пользователь увидит окончательную цену, то есть программа отработает. В чём же проблема?
Код с магическими числами сложно понять без контекста. Это может стать проблемой для разработчиков, которые впервые видят приложение. Да и автор кода может забыть, почему использовал именно это число.
Как избавиться от магических чисел
Это можно сделать с помощью константы с понятным названием. То есть название константы должно передавать смысл числа.
// указываем ставку НДС
const vatRate = 1.20;
const showBruttoPrice = (nettoPrice) => {
const bruttoPrice = nettoPrice * vatRate;
return bruttoPrice;
};
Очевидное указание ставки НДС делает код более понятным.
Код с магическими числами сложно поддерживать и расширять. Например, если магазин продаёт товары людям из разных стран, магические числа приводят к дублированию:
// в разных странах разные ставки НДС
const showBruttoPrice = (nettoPrice, country) => {
let bruttoPrice;
if (country === 'Russia') {
bruttoPrice = nettoPrice * 1.20;
}
if (country === 'Germany') {
bruttoPrice = nettoPrice * 1.19;
}
// стран может быть 5, 20 или 50
// для каждой придётся использовать
// своё магическое число
// ...
return bruttoPrice;
};
Проблему решает избавление от магических чисел:
const getVatRate = (country) => {
// получаем ставку НДС для конкретной страны из
// базы данных или из внешнего источника
};
const showBruttoPrice = (nettoPrice, country) => {
// определяем ставку НДС вместо того,
// чтобы указывать её с помощью магических чисел
const vatRate = getVatRate(country);
// определяем окончательную цену
const bruttoPrice = nettoPrice * vatRate;
return bruttoPrice;
};
Резюме:
- Магические числа — плохая практика в программировании
- Обычно магические числа не ломают код, а делают его менее понятным
- Чтобы избавиться от магических чисел, достаточно использовать константы или переменные с понятными названиями
Дополнительные материалы