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

Изменение итератора/счетчика цикла

Не рекомендуется менять значение итератора/счетчика цикла внутри цикла. Это может приводить к неверным вычислениям.

Также такое присвоение является частным случаем порочной практики, когда одна и та же локальная переменная используется для хранения разных промежуточных значений. - Переменная, которая используется для хранения разных промежуточных значений

Например, следующие циклы некорректны

Для Каждого Элемент Из Коллекция Цикл// первичная инициализация
    Элемент = Коллекция[1];// ошибка
КонецЦикла;

Для Каждого ОчереднойЭлемент Из СледующаяКоллекция Цикл// первичная инициализация
    Для Каждого ОчереднойЭлемент Из ВложеннаяКоллекция Цикл// ошибка
        КакойТоКод();
    КонецЦикла;
КонецЦикла;

или

Для Счетчик = 0 По Коллекция.Количество() - 1 Цикл// первичная инициализация
    Счетчик = 1;// ошибка
КонецЦикла;

Для Счетчик = 0 По СледующаяКоллекция.Количество() - 1 Цикл// первичная инициализация
    Для Счетчик = 10 По ВложеннаяКоллекция.Количество() - 1 Цикл// ошибка
        КакойТоКод();
    КонецЦикла;
КонецЦикла;

См. также

Экранирование кода

// sonar:LoopCounterChanged:off
// sonar:LoopCounterChanged:on