Это довольно спорная тема, и я думаю, что мнений столько же, сколько и программистов. Но ради этого я хочу знать, каковы обычные практики в бизнесе (или на ваших рабочих местах).
На моем рабочем месте у нас есть строгие правила кодирования. Один из разделов посвящен магическим строкам / числам. В нем говорится (для C #):
Не используйте буквенные значения, как числовые, так и строковые, в своем коде, кроме как для определения символических констант. Используйте следующий шаблон для определения констант:
public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; }
Есть исключения: значения 0, 1 и нуль почти всегда можно использовать безопасно. Очень часто значения 2 и -1 тоже в порядке. Строки, предназначенные для ведения журнала или трассировки, освобождаются от этого правила. Литералы допускаются, когда их значение ясно из контекста и не подлежит будущим изменениям.
mean = (a + b) / 2; // okay
WaitMilliseconds(waitTimeInSeconds * 1000); // clear enough
Идеальной ситуацией была бы некоторая официальная исследовательская работа, показывающая влияние на читаемость / ремонтопригодность кода, когда
- Волшебные числа / строки повсюду
- Волшебные строки / числа разумно (или с разной степенью охвата) заменяются постоянными объявлениями - и, пожалуйста, не кричите на меня за использование «разумно», я знаю, что у всех разные представления о том, что такое «разумно»
- Волшебные строки / числа заменяются в избытке и там, где их не должно быть (см. Мой пример ниже)
Я хотел бы сделать это, чтобы иметь некоторые научно обоснованные аргументы при споре с одним из моих коллег, который собирается объявить такие константы, как:
private const char SemiColon = ';';
private const char Space = ' ';
private const int NumberTen = 10;
Другой пример будет (и этот в JavaScript):
var someNumericDisplay = new NumericDisplay("#Div_ID_Here");
Вы помещаете DOM ID поверх вашего файла JavaScript, если этот идентификатор используется только в 1 месте?
Я прочитал следующие темы:
StackExchange ИТ-сообщество
StackOverflow
Bytes
Есть еще много статей, и после прочтения появляются некоторые шаблоны.
Так что мой вопрос должен использовать магические строки и цифры в нашем коде? Я специально ищу ответы экспертов, которые подкреплены ссылками, если это возможно.
NumberTen = 10
Это бессмысленно, так как число 10 не будет переопределено. MaxRetryCount = 10
Это имеет точку а, мы можем захотеть изменить максимальное количество повторов. private const char SemiColon = ';';
Тупой. private const char LineTerminator = ';'
; Умная.