前言
新开一个系列,总结一下实践的一些领悟,注重于代码单元的最佳实践。
一般来说,同一段逻辑,同时会有不同的实现方式。不同实现的设计有不同的侧重,在一些方面表现优秀的设计,在另一些方面就可能不会那么优秀,而我们需要根据情况进行取舍。
这个系列会介绍一些我认为更加高效的编码方式,比起其他实现方式,我更喜欢这些方式。这是一些我已经进行了取舍的实践,我认为他们更加优秀。
准则
- 重视可读性 高于效率
- 重视可修改与简洁 高于完备与优秀的设计
卫语句(卫述语句)
一句话总结:函数中,可以返回的情况下尽早返回,以达到减少嵌套条件表达式的目的。
卫语句是一种有效的减少嵌套,减轻心智负担的代码组织方式,可以多加使用。
简介
卫语句是一种编程技巧,它将复杂的条件表达式拆分成多个条件表达式,减少嵌套,如果条件语句极其复杂,就应该将条件语句拆解开,然后逐个检查,并在条件为真时立刻从函数中返回,这样的单独检查通常被称之为“卫语句”(guard clauses)。卫语句的效果就是将原来需要仔细阅读代码、细心整理逻辑的条件判断整理成一眼能看透的逻辑关系。
总而言之,函数中,可以返回的情况下尽量提早返回,以达到减少嵌套条件表达式的目的,增强可读性。
报错
错误处理是卫语句的一个关键点。
GO,Rust 等将 把错误作为函数返回值返回 为规范的语言,更为重视卫语句,为了将错误提前返回,不进行额外无用的逻辑。
而对于 Java 的关于卫语句处理错误的实践很简单:尽早抛出异常。
例子
private boolean judge(Req req){
if(req.a){
if(req.b){
...
return true;
}
return false;
}
if(req.c){
...
return true;
}
return false;
}
这样的逻辑可能符合直觉易写,但不易于读与后续的变更。
private boolean judge(Req req){
if(req.c){
...
return true;
}
if(req.a){
...
return false;
}
if(req.b){
...
return true;
}
return false;
}
这样就易读多了,同时,下面的条件天然在上面条件的 else 中,心智负担小,将 a,b,c 三个条件简化为了四种情况,同时,每一行不需要记忆其他额外的问题。
总结
总而言之,减少嵌套深度,卫语句是一种有效的方式,可以多加使用。
文档信息
- 本文作者:nyaaar
- 本文链接:https://nyaaarlathotep.github.io/2024/04/03/%E5%AE%9E%E8%B7%B51/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)