Главная страница » C++ » 22. Магические числа
Магическое число — это числовое значение, которое используется в коде напрямую, без объяснения его смысла. Эти числа могут запутывать код и усложнять его понимание и поддержку, особенно если они встречаются многократно и их значение неочевидно.
Магические числа затрудняют чтение и сопровождение кода. Вот несколько основных проблем:
Неясность значения: Если кто-то читает код, не зная, что означает конкретное число, это усложняет понимание логики программы.
Трудность изменения: Если магическое число нужно изменить в будущем, необходимо найти и заменить его во всём коде. Это может быть сложно и рискованно.
Повышенная вероятность ошибок: Если одно и то же число встречается в нескольких местах и вы хотите изменить его значение, легко пропустить какое-то использование, что приведет к ошибкам.
Рассмотрим простой пример с магическим числом:
#include
int main() {
int salary = 50000;
double tax = salary * 0.13; // 0.13 — магическое число
std::cout << "Tax: " << tax << std::endl;
return 0;
}
В этом коде значение 0.13
используется напрямую, без объяснения его смысла. Если кто-то другой будет читать этот код, им будет непонятно, что это за число и почему оно используется.
Лучший способ избавиться от магических чисел — использовать именованные константы. Это делает код более читабельным и упрощает его поддержку.
const
Пример выше можно улучшить, заменив магическое число именованной константой:
#include
int main() {
const double TAX_RATE = 0.13; // Именованная константа
int salary = 50000;
double tax = salary * TAX_RATE;
std::cout << "Tax: " << tax << std::endl;
return 0;
}
Теперь код ясно указывает, что TAX_RATE
— это налоговая ставка. Это делает код понятнее и даёт возможность легко изменить значение ставки, если это потребуется.
enum
для группировки значенийЕсли у вас есть набор связанных значений, их можно объединить в перечисление (enum
). Это помогает избежать магических чисел в случаях, когда используется несколько связанных констант.
Пример:
#include
enum DifficultyLevel {
EASY = 1,
MEDIUM = 2,
HARD = 3
};
int main() {
int level = EASY;
if (level == EASY) {
std::cout << "You selected Easy difficulty." << std::endl;
} else if (level == MEDIUM) {
std::cout << "You selected Medium difficulty." << std::endl;
} else if (level == HARD) {
std::cout << "You selected Hard difficulty." << std::endl;
}
return 0;
}
В этом примере вместо использования магических чисел 1
, 2
, 3
для обозначения уровней сложности используются именованные константы, что делает код более понятным.
Повышение читаемости кода: Именованные константы делают код более понятным, так как их имена описывают смысл значений.
Упрощение сопровождения: Когда значение требуется изменить, это легко сделать в одном месте (определении константы), и это изменение сразу применится ко всем частям программы, где используется эта константа.
Снижение вероятности ошибок: Использование констант помогает избежать ошибок, связанных с повторением одинаковых чисел в коде.
Магические числа являются распространённой проблемой в программировании, которая может привести к ухудшению качества кода и затруднить его сопровождение. Избегайте использования магических чисел, заменяя их именованными константами, что делает код более понятным и лёгким для изменений.
Напишите программу на C++, которая:
Примерный код:
#include
int main() {
const double VAT_RATE = 0.20; // НДС в размере 20%
double originalPrice = 100.0; // Первоначальная стоимость товара
double vatAmount = originalPrice * VAT_RATE; // Сумма НДС
double totalPrice = originalPrice + vatAmount; // Итоговая стоимость
std::cout << "Original Price: " << originalPrice << " units" << std::endl;
std::cout << "VAT Amount: " << vatAmount << " units" << std::endl;
std::cout << "Total Price: " << totalPrice << " units" << std::endl;
return 0;
}
Запустите программу и убедитесь, что она правильно рассчитывает и выводит суммы.
Наша цель и главная задача сделать качественное образование в вашем браузере
Телефон: +375 33 910-08-92
Email: info@codefor.tech
Адрес: г. Барановичи, ул. Пирогова, д. 7
© 2024 Все права защищены. CodeFor.