题
例如...
if ( /* Condition */ ) {
if ( /* Condition */ ) {
if ( /* Condition */ ) {
// Superb!
} else {
// Error 3
}
} else {
// Error 2
}
} else {
// Error 1
}
你知道如何避免这种情况吗?谢谢你!
解决方案
如果这是一个库函数, throw
可能是适当的行动。
if (!condition1) {
throw "Condition 1 failed.";
}
if (!condition2) {
throw "Condition 2 failed.";
}
if (!condition3) {
throw "Condition 3 failed.";
}
// Superb!
其他可接受的行动可能是:
- 返回
0
,null
, , 或者undefined
. - 向用户显示错误并返回。
您必须确定哪种故障操作适合您的用例。
其他提示
它看起来像您有3个条件,以检查和4点的动作(3个不同的误差+ 1次成功)。不幸的是在一般情况下,这将需要3个条件检查和4分的动作。我认为该代码可以通过使用下面的结构虽然被清洁了位
if (! /* condition 1 */ ) {
// Error 1
} else if (! /* condition 2 */ ) {
// Error 2
} else if (! /* condition 3 */ ) {
// Error 3
} else {
// superb
}
那么你可以一个块,或者多个函数内使用的异常,或断裂。通常,这需要你的反转条件,以获得代码订购的正确途径。
do {
if (! /* Condition 1 */ ) {
// Error 1
break;
}
if (! /* Condition 2 */ ) {
// Error 2
break;
}
if (! /* Condition 3 */ ) {
// Error 3
break;
}
// Superb!
} while (false);
在做,而(假)环是制作块,你可以在不会容忍一个匿名块语言打破了的一种方式。它可以很容易地成为一个功能和使用收益,或一个try-catch例外。
你会更喜欢这个?
if ( /* Condition 1*/ && /* Condition 2*/ && /* Condition 3 */) {
// Superb!
}
else if (! /* Condition 1*/){
// Error 1
}
else if (! /* Condition 2*/){
// Error 2
}
else if (! /* Condition 3*/){
// Error 3
}
if ( ! /* Condition */ ) {
Error 1
throw someSortOfException
}
if (! condition 2){
Error 2
throw someSortOfOtherException
}
if (! condition 3){
Error 3
throw another Exception
}
// Success!
根据不同的情况,你的代码可能会被优先。你可能会想某个地方赶那些例外的例子。
if (!condition1)
// Error 1 (and exit scope if necessary)
if (!condition2)
// Error 2 (and exit scope if necessary)
if (!condition3)
// Error 3 (and exit scope if necessary)
// Superb!
是;您可以将您if
语句组合到一起使用AND运算一个复合语句,并在单块处理错误条件。根据你的错误处理的需求,不过,你可能需要再次有多个if
s以确保你正确地处理错误(这取决于你的错误处理的分辨率,真的)。
要即:
if (CondA && CondB && CondC)
{
// Execute success
}
else
{
if (!CondA)
// Do error A
else if (!CondB)
// Do error B
else if (!CondC)
// Do error C
}
}
有几种方法,最简单的就是简单地出局了一些功能和抽象出来的不同层(如果你发现自己去深这本来也应该做。)
if ( /* Condition */ ) {
value = aFunctionSaysWhat();
} else {
// value = Error 1
}
....
value aFunctionSaysWhat(){
if ( /* Condition */ ) {
return aSecondFunctionHere();
} else {
// return Error 2
}
}
的基本前提是,函数应该住抽象如果可能的一个层上,并做一两件事。
下一个可能性是将其压平的所有出来,这是优于初始嵌套的方法,但基本上具有类似的复杂性。这可能是更清洁的比功能的方法,如果你只有几个选项,你不打算增加更多。
if(ErrorCondition1){
//Error 1
}else if(ErrorCondition2){
//Error 2
}else if(ErrorCondition3){
//Error 3
}else{
//Superb
}
最后,您还可以存储散列或地图所需的答案,并删除如果完全实现这依赖于你的能力哈希一些结果的能力:
Results = {'Result1':'Error1', 'Result2':'Error2', 'Result3':'Error3', 'Success':'Superb'}
return Results[ConditionHash(Condition)];
不隶属于 StackOverflow