![整理优先:小改进,大回报,整洁代码设计指南](https://wfqqreader-1252317822.image.myqcloud.com/cover/393/53029393/b_53029393.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
第1章 卫述句
你常常会看到这样的代码:
![](https://epubservercos.yuewen.com/193B93/31543162403658306/epubprivate/OEBPS/Images/24_01.jpg?sign=1739693844-M5cDOviT4Ma0jVWkkyp9ffeU7rSHR7e8-0-d101c1664a257fd7909009275580d8d7)
或者稍好一点的:
![](https://epubservercos.yuewen.com/193B93/31543162403658306/epubprivate/OEBPS/Images/24_02.jpg?sign=1739693844-PR2LbOhmxYQv0dUNE3OQlNT4ivVO377z-0-51d6a81ea9d4a4743911f10f00a880d6)
代码阅读者很容易被嵌套条件搞晕。要像这样整理上面的代码:
![](https://epubservercos.yuewen.com/193B93/31543162403658306/epubprivate/OEBPS/Images/24_03.jpg?sign=1739693844-XvA4vVETaEUZfXC5wRc6JWjRGQaS7UVt-0-b41372e6646b220e40ec117dc4437488)
这样更容易读懂。它的意思是:“在深入代码的细节之前,需要处理一些前提条件”。但是,多条返回语句是怎么回事呢?一个例程(routine)只有一条返回语句的“规则”来自FORTRAN时代,那时一个例程可以有多个入口点和出口点。你几乎无法调试这样的代码,也不知道执行了哪些语句。使用卫述句的代码则更容易分析,因为前提条件是明确的。
不要过多使用卫述句。一个包含七八条卫述句的例程读起来也并不轻松,往往需要我们投入更多的精力。
只有在精确匹配以下情形时,才能整理成卫述句:
![](https://epubservercos.yuewen.com/193B93/31543162403658306/epubprivate/OEBPS/Images/25_01.jpg?sign=1739693844-HvkE99l5SobEmyr6OplWLFnC9yC75dQU-0-339786208047b44791fb57a4857fd3ca)
像下面这样的代码则很难整理:
![](https://epubservercos.yuewen.com/193B93/31543162403658306/epubprivate/OEBPS/Images/25_02.jpg?sign=1739693844-0jGl5cgj8FD4Mikpvv5ZQAAJg84p5ugk-0-8d3442055ad01872c41f108e2cf7050a)
也许可以将前两行提取到一个辅助函数中,然后再将之整理成卫述句,但要始终采取小步的方式。
下面是一个例子:https://github.com/Bogdanp/dramatiq/pull/470。