Це дещо суперечлива тема, і, мабуть, існує стільки думок, скільки є програмістів. Але заради цього я хочу знати, які звичні практики в бізнесі (або на ваших робочих місцях).
На моєму робочому місці у нас є чіткі правила кодування. Один розділ цього присвячений магічним рядкам / номерам. У ньому зазначено (для C #):
Не використовуйте в коді буквальні значення чисельних чи рядкових, крім визначення символічних констант. Використовуйте такий шаблон для визначення констант:
public class Whatever { public static readonly Color PapayaWhip = new Color(0xFFEFD5); public const int MaxNumberOfWheels = 18; }
Є винятки: значення 0, 1 і null майже завжди можна використовувати безпечно. Дуже часто значення 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 поверх свого файлу javascript, якщо цей ідентифікатор використовується лише на 1 місці?
Я читав наступні теми:
StackExchange
StackOverflow
Bytes IT Community
Є ще багато статей, і після прочитання ці деякі моделі з'являються.
Тож моє питання полягає в тому, чи слід використовувати в нашому коді магічні рядки та цифри? Я спеціально шукаю відповіді експертів, які, якщо це можливо, підкріплені посиланнями.
NumberTen = 10
Це безглуздо, оскільки число 10 не буде переосмислено. MaxRetryCount = 10
У цьому є пункт a, можливо, ми захочемо змінити максимальну кількість спроб. private const char SemiColon = ';';
Тупий. private const char LineTerminator = ';'
; Розумний.