当您编写一条if / else语句链时,了解并评估执行时顺序的依赖性是明智的。将每个条件构造为逻辑互斥而非依赖于执行顺序可能是明智的。
新开发人员要学习的第一个概念是if / else语句。if / else语句是执行条件逻辑的最常见方法。但是,复杂的嵌套if / else语句可能很快成为认知负担,并损害程序的可读性
Guard Clauses:利用从函数中尽早返回(或继续执行循环)的功能,使多维嵌套条件变成一维,不要使用if / else链,我们只是在每个条件块末尾从函数中提前返回。
Go中的错误处理自然会鼓励开发人员使用保护子句。
下面是夸张嵌套:
function getInsuranceAmount(status) {
let amount;
if (!status.hasInsurance()){
amount = 1;
} else {
if (status.isTotaled()){
amount = 10000;
} else {
if (status.isDented()){
amount = 160;
if (status.isBigDent()){
amount = 270;
}
} else {
amount = 0
}
}
}
return amount;
}
|
使用Guard Clauses改写成:
function getInsuranceAmount(status) {
if (!status.hasInsurance()){
return 1;
}
if (status.isTotaled()){
return 10000;
}
if (!status.isDented()){
return 0;
}
if (status.isBigDent()){
return 270;
}
return 160;
}
|
在第一个示例中,如果开发人员试图弄清楚何时返回270,则他们需要考虑逻辑树中的每个分支,并试图记住哪些情况重要而哪些情况无关。使用Guard Clauses提供的一维结构,就像按顺序逐步处理每种情况一样简单。