鲍勃大爷:将if/else中每个条件变为逻辑并列互拆而不依赖执行顺序。

20-11-16 banq

当您编写一条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提供的一维结构,就像按顺序逐步处理每种情况一样简单。
 

1