我正在使用es-lint来清理代码中的错误。我遇到了这个错误:
"返回"之后不必要的"其他"。(不归路)
} else {
我总是在返回后使用 else 语句。我可能忽略了什么吗?
if (cctot <= 3 && cctot > 0) {
alert('Credit under $3.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);
这基本上是说,如果if
部分有return
,则 if 语句的 else 部分是不必要的。像这样的东西是它所期望的:
if (cctot <= 3 && cctot > 0) {
alert('Credit under $3.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
下面的代码仅在未满足所述条件时运行。
这是一个代码样式首选项。您不需要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
,但这又是一个纯粹的偏好问题。不要让它让你太担心。人们可能会对这种事情变得教条,但这真的不是那么重要。
虽然规则正确地指出else
块是不必要的,并且它是一种样式首选项,但我会添加额外的可读性注意事项,最重要的是可扫描性。
对于编写此代码的开发人员以及解释它的机器来说,它可能是一个风格点,仅此而已。但是对于需要修复错误、增强功能、进行代码审查等的开发人员来说,快速扫描代码并查看else
块的能力有助于识别逻辑分支。
在几行孤立的代码中,很容易看到意图,但在数百行代码中,具有if
else
块可以作为有用的标识符,就像其他常见的视觉实践,如缩进、换行符和命名约定一样。
return 语句停止/终止当前函数。它只是说不需要"else",因为函数的执行已经停止,如果"if"条件不成功,它仍然会运行它下面的任何代码。
至于最佳实践,我不会说这总是一件大事,但是对于您示例中的代码,我不会使用 else 子句,因为它根本不需要。我认为了解幕后发生的事情以及最佳实践背后的原因而不仅仅是遵循它们是件好事。