На недавнем проекте, мне нужно , чтобы преобразовать из байтов в килобайты kibibyte . Код был достаточно прост:
var kBval = byteVal / 1024;
После того, как я написал это, я заставил остальную часть функции работать и двигаться дальше.
Но позже я начал задаваться вопросом, вставил ли я в магический номер свой код. Часть меня говорит, что это было хорошо, потому что число является фиксированной константой и должно быть легко понято. Но другая часть меня думает, что было бы очень ясно, если бы он был обернут в определенную константу, как BYTES_PER_KBYTE
.
Так действительно ли числа, которые являются известными константами, действительно магические или нет?
Смежные вопросы:
Когда число магическое число? и считается ли каждое число в коде "магическим числом"? - похожи, но гораздо более широкие вопросы, чем то, что я задаю. Мой вопрос сосредоточен на общеизвестных постоянных числах, которые не рассматриваются в этих вопросах.
Устранение магических чисел: когда пора сказать «нет»? также связан, но сосредоточен на рефакторинге в противоположность тому, является ли постоянное число магическим числом.
1024
, потому что в противном случае ваша команда разработчиков будет тратить все свое время на споры о том, являются ли они «килобайтами» или «кибибайтами».
#define
KIBI
а 1024 - MEBI
как 1024 * 1024…
ZERO=0, ONE=1, TWO=2
и когда программы перенесены на другие языки (или программисты не меняют поведение при переключении своего языка), вы также увидите это там, и вы должны молиться, чтобы никто не изменил их на ONE=2
...
FOUR_HUNDRED_FOUR = 404
. Я работал над другим проектом, в котором они боролись за использование константных строк вместо литералов, поэтому они имели десятки строк в коде, который выглядел примерно такDATABASE = "database"