序:当你拿到一个需求,准备写一个5万行以上的程序的时候,你是否曾经觉得不知道从何下手?是不是有种困难重重的感觉?是否写完了一个函数,又觉得不是自己期望的用途?看起来都不是很复杂,可是一做起来,却又不知道为什么变得那么复杂了。如果你刚好遇到了这样的问题,请花上十分钟,认真读完本文,或许能解决掉您的一些疑问。
5年前,有一位对编码规范很有研究的同事曾经告诉过我这样一个秘诀“把函数的功能单一化”,是的,这是一个多么朴实确是无比实用的一句话啊!他说:“我写过一个用来统计代码的小工具,我很快就从网上知道了文件系统的接口如何使用,我觉得这是一件非常简单容易的事儿,于是我很快就开始了编码。我写了一个又一个函数,可是越来越发现我对于注释,函数域的统计出了问题,而且很难调试,很复杂。我发现很多情况如"/*, /**,///*,/*//"等我怎么都无法处理好,让我很懊恼失望,我几乎迷失了方向,不知怎么改是好了,因为我改好了一个问题就会引发一个新的问题出现。后来我就发现了这一个秘诀,把函数的功能单一化,我很快就解决了所有的问题。因为我不再是用很多复杂的逻辑去处理所有的情况了,我设计了一个仲裁和几个单一化的功能,用仲裁去判断要用那个小的功能来处理当前的字符,然后由各个单一化的功能去处理,我发现各种复杂的逻辑因此也都消失的无影无踪了。”
是的,把函数的功能单一化,常常是我们解决复杂逻辑的万灵丹。这点,曾经开发过"BitCommet"的Bram Cohen,也在他的博客中说过类似的话,“Use less code”,代码数量少,你维护的工作将会变得简单,他说到:“The less code you have, the less there is to maintain. You shouldn't slavishly count characters or lines of code in your program and reduce it at all costs, but generally speaking, less is better. ”他告诉我们“generally speaking,l