守卫条款--做条件句的更好方式

2020-10-11 18:05:38

新开发人员学习的第一个概念之一是if/Else语句。IF/ELSE语句是执行条件逻辑的最常见方式。但是,复杂和嵌套的if/Else语句会很快成为认知负担,并影响程序的可读性。

Guard子句利用提前从函数返回(或继续循环)的能力,使嵌套条件成为一维条件。我们不使用if/Else链,只需在每个条件块的末尾提前从函数返回:

函数除(被除数,除数int)(int,error){if除数==0{return 0,errors.New(";不能被零除)}返回被除数/除数,零}。

GO中的错误处理自然会鼓励开发人员使用保护子句。当我开始编写更多的JavaScript时,我失望地发现我正在处理的代码中存在如此多的嵌套条件。

函数getInsuranceAmount(Status){letAmount;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}}返回金额;}。

函数getInsuranceAmount(Status){if(!status.hasInsurance()){return 1;}if(status.isTotaled()){Return 10000;}if(!status.isDented()){ 返回0; }if(status.isBigDent()){return 270;}return 160;}。

上面的例子更容易阅读和理解。在编写代码时,尝试通过减少读者在任何给定时间需要考虑的实体数量来减轻读者的认知负担,这一点很重要。

在第一个示例中,如果开发人员试图计算何时返回270,他们需要考虑逻辑树中的每个分支,并试图记住哪些案例重要,哪些案例不重要。使用Guard子句提供的一维结构,只需按顺序遍历每个案例即可。