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

BSL029 - Магические числа

Кратко

Магические числа

Идентификаторы

Поле Значение
Код правила BSL029
Совместимый псевдоним MagicNumber
Серьёзность INFORMATION
Без конфигурации Да
BSLLS JSON, режим ON без переопределений Да
Флаг реестра implemented Да
Теги convention, readability

Флаг implemented отражает реестр и не подтверждает проверенное совпадение с BSLLS.

Поведение

  • Публичный идентификатор BSL029 и псевдоним MagicNumber стабильны.
  • Правило сообщает о случаях, описанных на этой странице.
  • Подавления и проектная конфигурация применяются до публикации результата.
  • Для выполнения правила не требуется внешний анализатор или сетевой доступ.

Настройка и подавление

Код BSL### - основной стабильный идентификатор. Совместимый псевдоним принимается в select, ignore и совместимых блоковых комментариях.

[tool.onec-hbk-bsl]
select = ["BSL029"]
ignore = ["MagicNumber"]

Все три семейства подавлений работают для текущей строки и диапазона. Если открывающий комментарий стоит после кода, он действует только на эту строку. Используйте любой один вариант:

  • noqa:
Значение = "пример";  // noqa: BSL029
  • bsl-disable (совместимый вариант):
Значение = "пример";  // bsl-disable: BSL029
  • совместимый BSLLS-вариант:
Значение = "пример";  // BSLLS:MagicNumber-off

Если тот же открывающий комментарий стоит на отдельной строке, он начинает диапазон. Закройте его парным маркером того же семейства:

// noqa: BSL029
// код без этой диагностики
// noqa-enable: BSL029

// bsl-disable: BSL029
// код без этой диагностики
// bsl-enable: BSL029

// BSLLS:MagicNumber-off
// код без этой диагностики
// BSLLS:MagicNumber-on

Чтобы отключить правило до конца файла, не добавляйте закрывающий noqa-enable, bsl-enable или BSLLS:…-on.

Открывающий и закрывающий маркеры должны принадлежать одному семейству.

Описание диагностики

Магические числа - это любое число в вашем коде, которое не сразу становится очевидным без погружения в контекст.

Примеры

Плохо

Функция ПопадаетВИнтервал(Длительность)

    Возврат Длительность < 10 * 60 * 60;

КонецФункции

Хорошо

Функция ПопадаетВИнтервал(ДлительностьВСекундах)

    МинутВЧасе      = 60;
    СекундВМинуте   = 60;
    СекундВЧасе     = СекундВМинуте * МинутВЧасе;
    ЧасовВИнтервале = 10;
    Возврат Длительность < ЧасовВИнтервале * СекундВЧасе;

КонецФункции

Исключения

Магические числа, используемые в структурах и соответствиях, не считаются ошибками, так как они используются в качестве ключей или значений в структурах данных, где контекст понятен:

// Операция Вставить структуры - нет ошибки
Структура = Новый Структура;
Структура.Вставить("МояПеременная", 20); // Нет ошибки
Структура.Вставить("ДругаяПеременная", 42); // Нет ошибки

// Конструктор структуры - нет ошибки
Структура2 = Новый Структура("Поле1, Поле2", 5, 15); // Нет ошибки

// Прямое присваивание свойству структуры - нет ошибки
СтруктураСПолями = Новый Структура("МояПеременная, ДругоеПоле");
СтруктураСПолями.МояПеременная = 20; // Нет ошибки
СтруктураСПолями.ДругоеПоле = 50; // Нет ошибки

// Фиксированная структура - нет ошибки
ФиксированнаяСтруктура = Новый ФиксированнаяСтруктура("Значение", 200); // Нет ошибки

// Соответствие - нет ошибки (как ключ, так и значение)
Соответствие = Новый Соответствие;
Соответствие.Вставить("Код", 123); // Нет ошибки
Соответствие.Вставить(1980, "Олимпиада в Москве"); // Нет ошибки