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

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

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

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

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

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

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

или

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

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

См. также - Переменная, которая используется для хранения разных промежуточных значений - MISRA C:2004, 13.6 - Numeric variables being used within a for loop for iteration counting shall not be modified in the body of the loop. - MISRA C++:2008, 6-5-3 - The loop-counter shall not be modified within condition or statement. - "for" loop stop conditions should be invariant