Effective Coding - Readability
Preface
都说程序员只是负责写代码的,做的都是比较低级的工作,不如架构师或设计师(以下统称架构设计师)感觉好。但是我认为,做软件不等同于盖楼房,不是说架构设计师做好设计图纸后程序员就可以按部就班的来写代码了,写程序变数很多,架构设计师不可能考虑到每一个细枝末节,同时也不可能每一个细节都要求的很死,这样写出来的程序成本是很高的(而且就我个人而言,我不认为这种模式下写出来的程序质量会高)。
如果你以为设计模式只是给设计师用的话那你就错了,其实架构师、设计师、程序员这三种角色是很难划分的,当一个架构师长时间不参与编码的话那么你会相信他做出来的架构吗?如果是我的话肯定不会,他只是在纸上谈兵而已,他已经落伍了,他的架构已经过时了,不再适用于现在这个年代了。同样,如果设计师设计时不为编码做考虑,那么试问他的设计是正确的吗?拿什么相信你,我的朋友。
所以说,一个人要是没有编码这个基础,什么架构啊、设计啊,都是不可靠的。这里我突出编码的重要性,实际上还是为下面的内容铺路!;)
Readability (可读性)
对于好的程序员来说,代码的可读性是一个硬性指标,是必须要做的任务,不管它是多么的枯燥,一段好的代码它的可读性应该永远都是非常高的,所谓非常高就是说不管什么人,包括你自己在内,若干时间后回头再看你的代码时能够很快的看懂、理解你的思路,不需要用运行调试的方法来了解你的代码、你的思路。
程序员就是一个艺术家,他将自己的思想、思维以代码这种逻辑形式表达,就好像画家用颜料表达自己的复杂的心绪一样。如何用代码来表达你自己的思想就是代码的可读性关键所在。
结构
业界中经常提到说好的代码自己可以讲话,告诉你它在干什么,它为什么要这样做。这怎么可能呢?其实这里突出的就是代码的结构是否清晰。如果代码被一种非常清晰的结构组织起来的话,那么你代码的可读性已经很高了,这是单靠话语(注释)所不能精确表达的抽象文档,是值得我们好好利用的方法。
Procedural Programming, Functional Programming, Object Oriented Programming, Aspect Oriented Programming,这些都提出了对代码结构进行组织的方法,但如果程序员对此不精通那么还是不能够充分利用它们对代码进行高效结构化。所谓高效结构化,实际上也涵盖了架构与设计这两个方面,架构与设计的意图就是为了搭建一个清晰的结构。
一方面,没有一个万能的指南告诉你什么时候应该怎样去组织代码的结构,这方面我只能告诉你去钻研一下你目前所使用的编程技术,是OOP,AOP还是其他什么;另一方面,还是存在一定的手段去评估你代码的结构是否清晰合理的,可以作为搭建结构时的参考。这些手段统称Code Metrics,也就是代码度量。
比如,我可以将一个有很长一段代码的方法打散,分成两个或多个方法,因为过长的方法实现是一个bad smell,证明你的结构还不够清晰、易读。为什么?因为过长的方法中肯定会有过多的分支,一个方法中的分支越多它的结构越不清晰,越难控制。所以为了可读性,为了维护性,我们都要将它打散。一般来说一个正常的方法所拥有的分支在5、6个左右,对于这种代码度量我们称之为Cyclomatic Complexity,也就是一个方法所拥有的分支数量。
注释
光靠结构清晰有时还是不够的,虽然清晰的结构可以使阅读者读懂80%,但是如果有注释加以辅助的话就可以有100%的功效了哦。这是怎么回事?哦,是这样的,就上面的例子来说,虽然一个好的方法实现只有少于5个的分支,但毕竟还是有分支,对于马上读懂来说是已经很方便了,但是还不够方便。这时我们再用注释标明每一块我们认为人类不够阅读直观的部分便可以了,同时也要标明对于方法等的描述。
注意注释也是有学问的,不是随便写的,对于类、方法等公共成员的注释一定要注明这个成员的作用和所有可能的输入输出(参数、返回值、异常);对于底层的方法实现除了要注明这部分实现的作用外还要注明为什么要这样做。说明作用,只是为了免去阅读代码的工序,如果没有说明只靠阅读代码也能明白;说明为什么要这样做,是为了描述程序员当时的思想,有了这个思想,即使代码的表现形式今后完全不同了也没关系,同一思想可以以不同的方式表达嘛!
命名规范
统一的命名规范会大大增进可读性,这里请注意统一二字!命名要采用人类方便阅读的文字,比如不要用汉语拼音作为变量名,尽量广的使用各种英语单词。其他的我就不说了,大家可以在网上搜一下这方面的资料。
格式
代码必须遵守格式化规范,比如统一的缩进、断行等。格式化在很大的程度上影响着代码的可读性,是不容忽视的部分。这里我不细说了,只是给出一个建议:尽量多用空行。:) 还是老样子,注意统一二字!
小结
以上这些内容说起来还是比较快的,但是真做起来还是需要每位程序员逐渐养成良好的习惯,刚开始肯定会非常不适应,不过慢慢就会变的很自然了。
代码规范有助于代码的可读性。