Перейти к содержанию

Магические числа (MagicNumber)

Тип Поддерживаются
языки
Важность Включена
по умолчанию
Время на
исправление (мин)
Теги
Дефект кода BSL
OS
Незначительный Да 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
}