好的代码不仅是对的,而且是看起来显然是对的。
优雅,简洁,高效是程序员写代码的最高追求,也是干净代码的最高境界。如果自认为是个有追求的程序猿,请追求最美好的东西,代码美到极致那就是艺术,看到自己写的东西让别人赏心悦目那心情想必是极好的。
要知道什么是干净的代码,自己才能写得出来,模仿是创造的前提。多看看别人写的东西。各种开源的apache项目和库的代码,不一定要深入的研究(当然如果深入研究更好),至少多看一看大师们写的代码都是长怎么样的。
干净的注释,很多人认为写注释是一种好习惯,写个max函数也注释一下,写个get,set函数也注释一下,莫非你把读你代码的人都当外行了吗?太多的注释是一种负担。过多的注释和没有注释一样,你根本不知道注释应该怎么用。注释更多的是解释为什么而作,而不是怎么做,因为你的代码已经很好的诠释了怎么做。你用注释来解释代码怎么做的,只能说明你的代码写得还不能让人看起来就是对的。注释关注你无法用代码表述的东西。关于注释,我看某知名互联网公司内部视频有个人做分享的时候,他说注释一定要用中文的注释,因为你是中国人,看你代码的也是中国人,而且要么你的英语没有那么好,要么你的同事的英语没有那么好。我想说的是,如果你还算得上个有追求有梦想的人,你断然不会这样说,为什么中国这么多聪明人,在计算机技术的发展过程中,没有任何有创造性的东西?没有任何一家真正算得上国际性的互联网公司?别把自己的能力局限在所处的环境中,心有多大,舞台就能有多大。
干净优雅的设计,谈到设计,不得不提到unix的KISS编程哲学,面向对象的语言怎么发展而来的?现在的OOD,OOA,设计模式等等都是从unix哲学上吸取了精华衍生而来的。提供锋利的小工具,其中每一样都把一件事做好,如cat ,wc,sort,grep,他们可以通过管道来传递数据,进行任意的组合,完成各种复杂的任务。现代面向对象思想中的低耦合、高内聚也不过是一种延伸。可视化可以更好的审阅,文本化更容易编辑和修改。
干净的算法是高效而清晰的,多问问自己还有没有更好的算法,更清晰更简洁更高效的算法?多积累,只有掌握了足够多的东西以后才知道什么东西是相对好的。只有不断的学习和积累。
干净的代码是有规范整齐的命名方式的,遵循各语言的命名规范或者公司内部的命名规范,比如首字母小写其余各单词的首字母小写
复用,重复功能的代码一定要提取出来成为一个单独的模块。
归类,厨房里面每一个盘子都很干净,但是摆得到处都是,不会显得特别干净,一定要物以类聚。把相似功能的代码放在一起,把有相关性的代码放在一起,不至于看一个文件中的函数是需要不停的上下翻动。看几个相关的类要越过多个文件夹。
跑之前先学会走。在进行代码的清洁工作之前一定要有一个功能齐整的东西。当然有些东西可以边写的时候边整理,比如函数名称和变量名称的可读可理解性,取一个能恰当表达含义的名字。以及各种局部的工作,如修改某个算法使之更高效。当然有些关于重复代码的抽取工作需要发现了重复代码以后才能进行的。特别是设计方面,好的设计不是一蹴而就的,用会经历反复的叠代的。只有不断的审视现有的设计,不断发现缺陷,改进,再发现问题。
破窗理论。一旦你的代码里面有一个地方显得不干净,那么慢慢的就会有第2个第3个,慢慢的整个代码都会脏乱差起来。所以只要发现你的代码中有不干净的地方,请及时修改它,later equals never,所以发现了就立即马上修复,不要说你稍后就改...
干净的含义不是不能增加任何东西,而是不能减少任何东西。
必要的重构。每天进行一小步的重构。
好的变量名和函数名,让循环嵌套更清晰。何谓好的,比如约定俗成的,既成事实的,除非你发明或发现更好的。好的变量名是程序员之间的jargon,比如createSocket,buffer,readLine。如果你写的东西总是规范的,当你需要去调用某个函数时,都不需要去翻看那个函数叫什么。
我有强迫症,总是会希望是再整理整理我的代码!
注意隐藏,把不该让别人看到的东西隐藏起来。这个道理很简单,你买的新内衣一定不会希望让所有到你家做客的人看见吧?
不传入空值,也不返回空值。每个人都遵守交通规则就不会有交通事故一个道理。但是我们得预防那些不遵守交通规则的人对我们造成的伤害,代码也是一样。我们需要防御式编程。