最近,同项目组的一位师姐请产假了,由我接手她之前的部分版本的开发工作。在开发的过程中,我阅读了某个很古老的版本的程序代码,心生感触,想在这里啰嗦几句。
该版本中很多函数的调用关系都错综复杂,让人读起来非常的费劲。我用如下的图来形象化地表示这种函数之间的调用关系。
箭头的指向为调用关系,如“函数A”调用了“函数B”、“函数C”、“函数D”、“函数E”、“函数F”,以此类推。
当函数之间的调用关系太多时,各个函数就组成了一个复杂的调用网络,很难将它们之间的关系理清楚。
那么,为什么会出现这么“糟糕”的函数设计呢?原因有以下几点:
第一,最原始版本的开发人员没有做好详细设计,程序是想到哪里就写到哪里。最原始版本犹如一座大楼的地基,地基没有打好,当然后续的工作就没那么顺利了。此外,后续的开发人员总喜欢拿之前开发人员的程序作为参照,“不好”的前辈只会教出更为“不好”的“徒弟”。
第二,项目组为了赶进度,只要求程序能够实现基本功能,并没有对代码进行严格的同行评审。“赶进度”只会产生糟糕的代码,而如果代码只是一个人说了算,那肯定会留下很多的问题。
第三,在程序演进的过程中,不同的开发人员对同一个版本的代码进行了修改。如果每个人都对一个版本的程序进行修改,由于大家编写代码的习惯都不尽相同,因此会使得程序“越改越差”。
那么,优秀的程序有什么样的要求呢?要求之一就是:函数设计应做到低耦合,高内聚。也就是说,在不增加代码复杂度的情况下,尽量减少函数之间的调用关系,在本函数实现规定的功能。
“低耦合,高内聚”的函数设计有什么好处呢?好处有以下几点:
第一,便于对程序进行维护。这点很重要,特别是刚入职的员工,如果他们阅读到了逻辑清晰、编程规范的代码,真的是一种福气。
第二,便于程序版本的演进。有了好的“榜样”,之后对程序的增删改的工作都更加的容易了。
第三,便于不同项目组或产品线之间的沟通交流。优秀的代码应该拿出来,供大家一起学习。“他山之石,可以攻玉”,只有不断地学习别人好的、成功的经验,自己的能力才能够得到提升。
当然,好的函数设计方法也不是一朝一夕就能够掌握的,只要我们坚持学习、不断总结,相信定然会写出优美的、易于阅读和理解的程序来的。
(本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,微信号:245924426,欢迎关注!)