![整理优先:小改进,大回报,整洁代码设计指南](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=1739140960-J8B7h3Z6hAJqXMj6mRkpl6d0uEF5zeCs-0-817720a121bfe65eee9b35304ad7c708)
或者稍好一点的:
![](https://epubservercos.yuewen.com/193B93/31543162403658306/epubprivate/OEBPS/Images/24_02.jpg?sign=1739140960-C6KYFoWr1j4kzmWwTnYkNesqU23YCWAr-0-42f7b21e1043a5d956cd97524c5a6c9c)
代码阅读者很容易被嵌套条件搞晕。要像这样整理上面的代码:
![](https://epubservercos.yuewen.com/193B93/31543162403658306/epubprivate/OEBPS/Images/24_03.jpg?sign=1739140960-FBN6zWpb4Y1TOX5qvwuIwIfKq7VSOucN-0-df6015081e5b4a7529c85f4be8fe1366)
这样更容易读懂。它的意思是:“在深入代码的细节之前,需要处理一些前提条件”。但是,多条返回语句是怎么回事呢?一个例程(routine)只有一条返回语句的“规则”来自FORTRAN时代,那时一个例程可以有多个入口点和出口点。你几乎无法调试这样的代码,也不知道执行了哪些语句。使用卫述句的代码则更容易分析,因为前提条件是明确的。
不要过多使用卫述句。一个包含七八条卫述句的例程读起来也并不轻松,往往需要我们投入更多的精力。
只有在精确匹配以下情形时,才能整理成卫述句:
![](https://epubservercos.yuewen.com/193B93/31543162403658306/epubprivate/OEBPS/Images/25_01.jpg?sign=1739140960-Gs4rCyjc531UFBKVS6QYDHny2pzQacAN-0-226b035835988aa96c2029414252b347)
像下面这样的代码则很难整理:
![](https://epubservercos.yuewen.com/193B93/31543162403658306/epubprivate/OEBPS/Images/25_02.jpg?sign=1739140960-RTw5j2FiuSVPuotnsFSze4mkmjnSViPG-0-e2a09f2f11845316ba165a3848e71ba7)
也许可以将前两行提取到一个辅助函数中,然后再将之整理成卫述句,但要始终采取小步的方式。
下面是一个例子:https://github.com/Bogdanp/dramatiq/pull/470。