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

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

Кратко

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

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

Поле Значение
Код правила BSL029
Совместимый псевдоним MagicNumber
Серьёзность INFORMATION
Включено по умолчанию Да
Реализовано Да
Теги convention, readability

Поведение

  • Публичный идентификатор 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, "Олимпиада в Москве"); // Нет ошибки