Spec-Zone.ru › ESLint

consistent-return

Требовать, чтобы return операторы всегда или никогда не указывали значения

В отличие от статически типизированных языков, которые обеспечивают, что функция возвращает значение заданного типа, JavaScript позволяет разным ветвям кода в функции возвращать разные типы значений.

Путающим аспектом JavaScript является то, что функция возвращает undefined в следующих случаях:

  • она не выполняет return оператор перед завершением
  • она выполняет return, который не указывает значение явно
  • она выполняет return undefined
  • она выполняет return void за которым следует выражение (например, вызов функции)
  • она выполняет return за которым следует любое другое выражение, вычисляющееся в undefined

Если какие-либо ветви кода в функции возвращают значение явно, но некоторые ветви кода не возвращают значение явно, это может быть ошибкой ввода данных, особенно в большой функции. В следующем примере:

  • ветвь кода через функцию возвращает булево значение true
  • другая ветвь кода не возвращает значение явно, поэтому возвращает undefined неявно
function doSomething(condition) {
    if (condition) {
        return true;
    } else {
        return;
    }
}

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

Это правило требует, чтобы return операторы всегда или никогда не указывали значения. Это правило игнорирует определения функций, имена которых начинаются с заглавной буквы, потому что конструкторы (когда вызываются с оператором new ) неявно возвращают созданный объект, если они не возвращают другой объект явно.

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

Открыть в Playground
/*eslint consistent-return: "error"*/

function doSomething(condition) {
    if (condition) {
        return true;
    } else {
        return;
    }
}

function doSomethingElse(condition) {
    if (condition) {
        return true;
    }
}

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

Открыть в Playground
/*eslint consistent-return: "error"*/

function doSomething(condition) {
    if (condition) {
        return true;
    } else {
        return false;
    }
}

function Foo() {
    if (!(this instanceof Foo)) {
        return new Foo();
    }

    this.a = 0;
}

Параметры

Это правило имеет параметр типа объект:

  • "treatUndefinedAsUnspecified": false (по умолчанию) всегда указывать значения или возвращать undefined неявно только.
  • "treatUndefinedAsUnspecified": true всегда указывать значения или возвращать undefined явно или неявно.

treatUndefinedAsUnspecified

Примеры неправильного кода для этого правила с параметром { "treatUndefinedAsUnspecified": false } по умолчанию:

Открыть в Playground
/*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": false }]*/

function foo(callback) {
    if (callback) {
        return void callback();
    }
    // no return statement
}

function bar(condition) {
    if (condition) {
        return undefined;
    }
    // no return statement
}

Примеры неправильного кода для этого правила с параметром { "treatUndefinedAsUnspecified": true }:

Открыть в Playground
/*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/

function foo(callback) {
    if (callback) {
        return void callback();
    }
    return true;
}

function bar(condition) {
    if (condition) {
        return undefined;
    }
    return true;
}

Примеры правильного кода для этого правила с параметром { "treatUndefinedAsUnspecified": true }:

Открыть в Playground
/*eslint consistent-return: ["error", { "treatUndefinedAsUnspecified": true }]*/

function foo(callback) {
    if (callback) {
        return void callback();
    }
    // no return statement
}

function bar(condition) {
    if (condition) {
        return undefined;
    }
    // no return statement
}

Когда от него следует отказаться

Если вы хотите разрешить функциям иметь разное return поведение в зависимости от ветвления кода, тогда безопасно отключить это правило.

Версия

Это правило было добавлено в ESLint v0.4.0.

Ресурсы

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

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

Spec-Zone.ru

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