no-dupe-else-if
Запретить дублирование условий в цепочках if-else-if
Использование конфигурации recommended из @eslint/js в файле конфигурации активирует эту проверку
if-else-if цепочки часто используются, когда необходимо выполнить только один (или максимум один) из нескольких возможных блоков кода в зависимости от определённых условий.
if (a) {
foo();
} else if (b) {
bar();
} else if (c) {
baz();
}
Два одинаковых условия в одной цепочке почти всегда являются ошибкой в коде. Если в выражениях нет побочных эффектов, дубликат вычислится до того же true или false значения, что и идентичное выражение ранее в цепочке, что означает, что его ветвь никогда не выполнится.
if (a) {
foo();
} else if (b) {
bar();
} else if (b) {
baz();
}
В приведённом выше примере, baz() никогда не выполнится. Очевидно, что baz() может быть выполнено только тогда, когда b вычисляется как true, но в этом случае bar() будет выполнено вместо него, так как оно расположено раньше в цепочке.
Подробное описание правила
Это правило запрещает дублирование условий в одной if-else-if цепочке.
Примеры некорректного кода для этого правила:
/*eslint no-dupe-else-if: "error"*/
if (isSomething(x)) {
foo();
} else if () {
bar();
}
if (a) {
foo();
} else if (b) {
bar();
} else if (c && d) {
baz();
} else if () {
quux();
} else {
quuux();
}
if (n === 1) {
foo();
} else if (n === 2) {
bar();
} else if (n === 3) {
baz();
} else if () {
quux();
} else if (n === 5) {
quuux();
}
Примеры корректного кода для этого правила:
/*eslint no-dupe-else-if: "error"*/
if (isSomething(x)) {
foo();
} else if (isSomethingElse(x)) {
bar();
}
if (a) {
foo();
} else if (b) {
bar();
} else if (c && d) {
baz();
} else if (c && e) {
quux();
} else {
quuux();
}
if (n === 1) {
foo();
} else if (n === 2) {
bar();
} else if (n === 3) {
baz();
} else if (n === 4) {
quux();
} else if (n === 5) {
quuux();
}
Это правило также может обнаруживать некоторые случаи, когда условия не идентичны, но ветвь никогда не выполнится из-за логики операторов || и &&.
Примеры дополнительного некорректного кода для этого правила:
/*eslint no-dupe-else-if: "error"*/
if (a || b) {
foo();
} else if () {
bar();
}
if (a) {
foo();
} else if (b) {
bar();
} else if () {
baz();
}
if (a) {
foo();
} else if () {
bar();
}
if (a && b) {
foo();
} else if () {
bar();
}
if (a || b) {
foo();
} else if () {
bar();
}
if (a) {
foo();
} else if (b && c) {
bar();
} else if () {
baz();
}
Обратите внимание, что это правило не сравнивает условия из цепочки с условиями внутри операторов и не будет выдавать предупреждения в таких случаях, как:
if (a) {
if (a) {
foo();
}
}
if (a) {
foo();
} else {
if (a) {
bar();
}
}
Когда не следует использовать
В редких случаях, когда вам действительно нужны одинаковые условия в одной цепочке, что неизбежно означает, что выражения в цепочке вызывают и полагаются на побочные эффекты, вам придётся отключить это правило.
Связанные правила
Версия
Это правило было добавлено в ESLint v6.7.0.
Ресурсы
© OpenJS Foundation and other contributors
Licensed under the MIT License.
https://eslint.org/docs/latest/rules/no-dupe-else-if