使用什么构造更好?如果我总是在if
语句中抛出异常,那么实际上if
块之后的代码将永远不会执行,因此不需要else
。但另一方面,块不应该同时执行,所以使用else
可能是一个很好的做法,对吧?
版本1
if (!this.regions[region]) {
throw 'Component ignored: region ' + region + 'does not exists';
}
else {
....
}
版本2
if (!this.regions[region]) {
throw 'Component ignored: region ' + region + 'does not exists';
}
......
不需要else
子句,因为它是否存在没有区别。if
块之后的代码仅在if
语句为false时执行,因为如果它为true,则它将抛出异常,并且永远不会超过if
。
这与通常使用的类似
function doSomething(a, b) {
if (!a || b < 2) {
return false;
}
// more code here
return true;
}
同样,不需要else
语句,因为只有当它是falsey
时,代码才会超过if
语句,所以所有剩余的代码都已经是else
了。
您可以使用else
,但它不是必需的,也不添加任何功能。在这些情况下,我不喜欢使用else,因为它只会导致比需要的更多的代码缩进。
版本2被称为"短路逻辑"。如果出现问题,请中止。这是完全有效的。
如果达到throw
语句,throw
下面的代码将不会执行。
如果与else一起使用,它将只在不匹配的表达式内执行else
。
但如果不使用else,它也将执行表达式和if
代码之后的代码。此外,即使表达式不匹配或在CCD_ 18之后匹配也将执行。