Магические числа (MagicNumber)¶
| Тип | Поддерживаются языки |
Важность | Включена по умолчанию |
Время на исправление (мин) |
Теги |
|---|---|---|---|---|---|
Дефект кода |
BSLOS |
Незначительный |
Да |
1 |
badpractice |
Параметры¶
| Имя | Тип | Описание | Значение по умолчанию |
|---|---|---|---|
authorizedNumbers |
Строка |
Список разрешенных чисел через запятую. Например: -1,0,1,60 |
-1,0,1 |
allowMagicIndexes |
Булево |
Разрешить магические индексы |
true |
Описание диагностики¶
Магические числа - это любое число в вашем коде, которое не сразу становится очевидным без погружения в контекст.
Примеры¶
Плохо
Функция ПопадаетВИнтервал(Длительность)
Возврат Длительность < 10 * 60 * 60;
КонецФункции
Хорошо
Функция ПопадаетВИнтервал(ДлительностьВСекундах)
МинутВЧасе = 60;
СекундВМинуте = 60;
СекундВЧасе = СекундВМинуте * МинутВЧасе;
ЧасовВИнтервале = 10;
Возврат Длительность < ЧасовВИнтервале * СекундВЧасе;
КонецФункции
Исключения¶
Магические числа, используемые в структурах и соответствиях, не считаются ошибками, так как они используются в качестве ключей или значений в структурах данных, где контекст понятен:
// Операция Вставить структуры - нет ошибки
Структура = Новый Структура;
Структура.Вставить("МояПеременная", 20); // Нет ошибки
Структура.Вставить("ДругаяПеременная", 42); // Нет ошибки
// Конструктор структуры - нет ошибки
Структура2 = Новый Структура("Поле1, Поле2", 5, 15); // Нет ошибки
// Прямое присваивание свойству структуры - нет ошибки
СтруктураСПолями = Новый Структура("МояПеременная, ДругоеПоле");
СтруктураСПолями.МояПеременная = 20; // Нет ошибки
СтруктураСПолями.ДругоеПоле = 50; // Нет ошибки
// Фиксированная структура - нет ошибки
ФиксированнаяСтруктура = Новый ФиксированнаяСтруктура("Значение", 200); // Нет ошибки
// Соответствие - нет ошибки (как ключ, так и значение)
Соответствие = Новый Соответствие;
Соответствие.Вставить("Код", 123); // Нет ошибки
Соответствие.Вставить(1980, "Олимпиада в Москве"); // Нет ошибки
Сниппеты¶
Экранирование кода¶
// BSLLS:MagicNumber-off
// BSLLS:MagicNumber-on
Параметр конфигурационного файла¶
"MagicNumber": {
"authorizedNumbers": "-1,0,1",
"allowMagicIndexes": true
}