'return' 后不必要的 'else'。 (No-else-return)

Unnecessary 'else' after 'return'. (No-else-return)

我正在使用 es-lint 来清理代码中的错误。我遇到过这个错误:

Unnecessary 'else' after 'return'. (No-else-return)

} else {

我总是在 return 之后使用 else 语句。有什么我可能忽略的地方吗?

if (cctot <= 3 && cctot > 0) {
    alert('Credit under .00 not allowed');
    return Number.MIN_SAFE_INTEGER; // important to return 0 so we can check for these conditions for validation
} else {
    cctot *= -1;
}
return precise(cctot);

这是一种代码风格偏好。您不需要 else,而是可以将 else 代码直接放在 if 下方。这是因为如果 if 成功,函数就结束了,所以无论如何都不会到达 else 代码。

所以这个:

if (condition) {
  return foo;
} else {
  // do bar
}

return baz

相当于:

if (condition) {
  return foo;
}

// do bar

return baz

这种风格似乎在不同的编程社区有所不同。 Go 开发人员几乎总是会省略 else,而我看到更多的 JS 开发人员包含它。

虽然我更愿意放弃 else,但这又纯粹是个人喜好问题。不要让它让你太担心。人们可能对这种事情感到教条,但它真的没有那么重要。

这基本上是说,如果 if 部分中有 return,则 if 语句的 else 部分是不必要的。 它所期望的是这样的:

if (cctot <= 3 && cctot > 0) {
      alert('Credit under .00 not allowed');
      return Number.MIN_SAFE_INTEGER; // important to return 0 so we can check for these conditions for validation
}
cctot *= -1;

一般来说,这:

if (condition) {
  return something;
} else {
  // do another thing
}

return anotherThing;

类似于:

if (condition) {
  return something;
}

// do another thing
return anotherThing;

在带有 return 语句的 if 之后,不需要 else 部分,因为 if 下面的代码只会 运行当不满足规定的条件时。

return声明stops/terminates当前函数。这只是说不需要 'else' 因为函数的执行已经停止,如果 'if' 条件不成功,它仍然会 运行 它下面的任何代码。

至于最佳实践,我不会总是说这有什么大不了的,但是对于您示例中的代码,我不会使用 else 子句,因为根本不需要它。我认为了解引擎盖下发生的事情以及最佳实践背后的原因而不是仅仅遵循它们是很好的。

虽然规则正确指出 else 块是不必要的,并且它是一种风格偏好,但我会添加额外的考虑 可读性 最重要的是 可扫描性.

对于编写此代码的开发人员以及解释它的机器而言,它可能是一个样式点,仅此而已。但对于需要修复错误、增强功能、进行代码审查等的开发人员来说,快速扫描代码并查看 else 块的能力有助于识别逻辑分支。

在几行孤立的代码中很容易看出意图,但在具有 if else 块的数百行代码中可以作为有用的标识符,就像其他常见的视觉对象一样缩进、换行和命名约定等做法。