Магические числа — один из способов писать чистый код.
Теперь мы поговорим о важном принципе, который облегчает чтение и изменение кода, чтобы код имел приятный запах.
Во-первых, давайте объясним, что такое код. запахи есть. Запах кода — это индикатор проблем, которые можно решить в ходе рефакторинга. Это легко обнаружить, а обнаружение также исправляет их.
Предположим, что после того, как вы закончите задачу кодирования, которая занимает у вас 8 часов, и скажете «ОМГ», в конце концов закончите, это займет много времени! И вы вставили свой код, и куча кода выглядит так.
double deductFromStanderdEmployee(JouniorEmployee standerdEmployee){ standerdEmplyee.gross= standerdEmplyee.gross - (3.3 + 2.3) / 100 * standerdEmplyee.gross; }
Вы знаете, что вычет составляет 3,3 процента государственных налогов и 2,3 процента налогов на медицинские услуги.
Теперь бригадиру нужно изменить медицинские услуги на 3,5 процента, и он приказывает сделать это вашему другу.
Теперь ваш друг смотрит на код, и у него возникает такое впечатление: какой номер налога на медицинские услуги 3,3 или 2,3. ?🤔️
Так что теперь проблема очень ясна. Вы используете уникальное значение с необъяснимым значением, что и означает магическое число. Лучше использовать именованную константу для идентификации вашего магического числа. Давайте проведем рефакторинг вашего кода.
const double GOVERNMENTAL_TAXES_PERCENTAGE=3.3; const double MEDICAL_SERVICES_TAXES_PERCENTAGE=2.3; double deductFromStanderdEmployee(JouniorEmployee standerdEmployee){ standerdEmplyee.gross= standerdEmplyee.gross - (GOVERNMENTAL_TAXES_PERCENTAGE + MEDICAL_SERVICES_TAXES_PERCENTAGE) / 100 * standerdEmplyee.gross; }
Теперь ваш друг может легко заметить, какая из них является медицинской службой, и он может легко изменить значение переменной. Кроме того, если эта переменная используется в нескольких местах кода, это сэкономит ему время на изменение одного места вместо нескольких мест.
Теперь вы спрашиваете, а как насчет 100? Разве это не магическое число?
Я скажу нет, это не магическое число; мы можем заметить, что мы рассчитали процент, так что это очень ясно и прямолинейно. Это похоже на цикл for, например:
for (int i=0;i<n;i++){ //some code here; }
Здесь инициализация счетчика ( i ) нулем, вероятно, уместна; очевидно, для чего служит ноль.
Подводя итог, мы заметили, что магические числа вызывают некоторые конфликты, поэтому мы должны учитывать это при рефакторинге, чтобы не совершать этих ошибок.
Спасибо за чтение. Я надеюсь встретиться с вами в моей следующей статье.
Некоторые ссылки для дополнительного чтения:
https://en.wikipedia.org/wiki/Magic_number_(programming)
«https://refactoring.guru/replace-magic-number-with-symbolic -постоянный"