Spec-Zone.ru › ESLint

for-direction

Требует, чтобы в выражении обновления цикла for счётчик изменялся в правильном направлении

✅ Рекомендуется

Использование конфигурации recommended из @eslint/js в файле конфигурации включает это правило

Цикл for с условием остановки, которое никогда не может быть выполнено, например цикл со счётчиком, изменяющимся в неправильном направлении, будет выполняться бесконечно. Хотя иногда бесконечный цикл необходим, принято создавать такие циклы как циклы while. Чаще всего бесконечный цикл for — это ошибка.

Подробное описание правила

Это правило запрещает циклы for, в которых переменная-счётчик изменяется так, что условие остановки никогда не будет выполнено. Например, если значение переменной-счётчика увеличивается (то есть i++), а условие остановки проверяет, что значение счётчика больше нуля (i >= 0), цикл никогда не завершится.

Примечание: Это правило проверяет только направление изменения счётчика относительно условия остановки. Оно не проверяет фактические значения, чтобы определить, выполнится ли цикл хотя бы один раз. Например, цикл вроде for (let i = 0; i < 0; i++) {} считается допустимым этим правилом, поскольку направление изменения счётчика (i++) соответствует условию (i <), хотя условие ложно с самого начала (мёртвый код).

Примеры неправильного кода для этого правила:

Открыть в Playground
/*eslint for-direction: "error"*/
for (let i = 0; i < 10; i--) {
}

for (let i = 10; i >= 0; i++) {
}

for (let i = 0; i > 10; i++) {
    // counter i is on the left with >, so i++ (increasing) is the wrong direction
}

for (let i = 0; i > 0; i++) {
    // counter i is on the left with >, so i++ (increasing) is the wrong direction
}

for (let i = 0; 0 < i; i++) {
    // counter i is on the right with <, so i++ (increasing) is the wrong direction
}

for (let i = 0; 10 > i; i--) {
}

const n = -2;
for (let i = 0; i < 10; i += n) {
}

Примеры правильного кода для этого правила:

Открыть в Playground
/*eslint for-direction: "error"*/
for (let i = 0; i < 10; i++) {
}

for (let i = 0; 10 > i; i++) { // with counter "i" on the right
}

for (let i = 10; i >= 0; i += this.step) { // direction unknown
}

for (let i = MIN; i <= MAX; i -= 0) { // not increasing or decreasing
}

for (let i = 0; i < 0; i++) {
    // counter i is on the left with <, so i++ (increasing) is the correct direction
    // (loop never executes, but direction is consistent)
}

for (let i = 0; 0 > i; i++) {
    // counter i is on the right with >, so i++ (increasing) is the correct direction
    // (loop never executes, but direction is consistent)
}

Параметры

У этого правила нет параметров.

Версия

Это правило добавлено в ESLint v4.0.0-beta.0.

Ресурсы

  • Исходный код правила
  • Исходный код тестов

© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/for-direction

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API