谈起代码质量,可读性,可维护性等,老是说,咱们要有一套代码规范来严格执行。我经历的公司,大多都有代码规范,至于最终代码规范有没有发挥做用么,你猜……
代码规范从制定到实施到发挥做用,其实仍是有不少小的细节,今天我就来讲说我看到的一些细节。html
代码规范的自己的问题
从规范目标细节的角度,代码规范分为:前端
代码规范从实施的角度,我分了几类:java
@Class的写法
写法模板:@class class1, class2;
建议的写法git
1 |
@class UIView, UIImage; |
不建议的写法程序员
1 |
@class UIPress; |
以上的规范,纯属编写规范的人的我的喜爱,写法上我以为没有对错,有一些过线。github
5.关于特定语言或者数据库的编码特殊限定需求
例如:进行equal判断时,倒着写的规范:
if(“true”.equals(isLogin)){return true;}
用StringBuffer代替String;用Stringbulider代替StringBuffer;数据库
网上我仍是看了很多的规范,真的好的规范很少。代码规范通常会由团队里资深的程序员来制定,制定的方法通常是网上找一个基本的Base版,再作增减。专业的事交给专业的人来作,代码规范的制定应该由在一线摸爬滚打不少年的程序员主导,由多人参与共同制定,牵头人最好是作过不少大项目,有多年编程经验,为人谦虚,并一直保持学习状态的全栈工程师。编程
一个好的代码规范,必须由全部的团队成员一块儿认同,共同来维护,而不是由制定的人,来负责推广监督执行。在一开始制定的时候,就要充分的听取各方的意见,达成一致。有的代码规范太细,在写代码的时候,无法细抠,在过后也没有机会review,与其不能执行,不如简化些,更接地气。有的代码规范太抽象,例如函数规模,代码规模等,仍是要有可量化标准,可执行的方法,最好能有工具支持,例如写代码时的提示,编译代码前的格式自动检查等等。app
代码规范的养成,习惯比规范更重要
代码规范除了制定,其实更注重每一个程序员的执行。程序员天天写代码的时候更规范,固然会比以后再review代码,再整理代码作的好的多。而写代码时的控制,更多的是一种习惯。代码规范前几条里必然有命名,缩进等,这些天天写代码的基本,必然是每一个程序员的习惯,而不是时刻挂在脑子里,要想一下的东西。就像前端程序员写html的时候,必定会注意封闭性,写一个<div></div>必定成对出现。eclipse
对于刚开始写代码的小白来讲,只要写一段时间的代码,习惯也会慢慢养成。这种养成是IDE协助下的养成。或者说,养成了IDE建议咱们的习惯。举例说,JAVA的eclipse协助生成get;set;的代码,默认的会有setApplicationId这样的大小写习惯,会有{在前一行最后的默认习惯
1 |
for(int i=0;i<max;i++){ |
而一样的,C#的著名IDE Visual Studio就会帮.Net程序员养成,{}分行的习惯(默认配置是这样的)
1 |
for(int i=0;i<max;i++) |
渐渐的,IDE帮咱们区分了这个程序员是写什么代码出身的,给程序员的代码打上了不一样种类的标准印记。有些左撇子在小时候,父母会强制他们用右手拿筷子吃饭,IDE的这种强制,对以后程序员的制定代码规范也有深深的印记。他们会以为,本身最熟悉的那种类型,那种习惯就是正确的。我看了不少语言的代码规范后,发现这种IDE的习惯的影响力还真的是很强,也会影响到代码规范的制定。
另外一方面,有的习惯是工具帮不了咱们的。例如代码规模的控制,例若有野生程序员喜欢用拼音来命名。一些优秀程序员须要养成的习惯:
固然好的习惯远远不止以上这些,好习惯就是每一个程序员的功底,内功,基础越好的程序员,写代码的效率固然越高。
代码规范的推行方式
IDE对于代码规范的影响,从侧面说明了另一个问题,代码规范的推行问题。
我目前想到的代码规范的推行方式,定制工具,培养习惯,code review。
据说,百度之前学Google的时候,也搞了一套相似的模式。新程序员入职的时候,要先学习代码规范,而后学会整个编码发布的流程,其中就有自动化检查代码规范的流程,若是不经过,就回去继续改,不能发布。新程序员通常都要花上一两天学习这套东西,不然工做永远完成不了。这里说的就是代码规范的强制推行工具,帮助或者说限制程序员必需要按照制定的标准来。
学会使用统一的工具,统一开发环境或者IDE工具,使用统一的ESLint,JSLint配置。或者公司有统一的代码规范检查工具。
固然,有的规范能够工具化,有的不能够
例如大小写问题,下划线问题,每行长度问题,if后{}位置问题,空格的编写等。单个函数不超过规定行数?缩进层数是否不超过规定?这些很容易用工具来检查。
包装类作简单预算前是否保证非空? 建议都使用包装类。方法调用前是否有非空判断?这些就没这么容易了。而前面举例的一些自行掌控的规范,更是只能看程序员的素质了。
代码规范推行的最后一招,就是code review。具体分实时review,编写后review,meeting review。 实时是指结对编程的那种方式,编写后是说Leader帮忙检查代码,meeting review的代价最大,一组人一块儿审阅代码。
代码规范为何难以推行?由于没有自动化。规范的条条框框这么多,随时记在脑子里,怎么可能?不要期望程序员手工写代码的时候,能认真执行这些规则。从推行方式来看,IDE工具或者统一配置IDE工具的方式最简单->定制代码检查和规范工具->培养程序员习惯->code review。而现实状况见的最多的执行方案,是先安排我的制定一套规范,用代价最高的code review的方式来推行,几回以后,你们都以为性价比低而放弃了。一个好的代码规范的推行,要更多的自动化,更早的在编写过程当中处理问题。
代码规范的其余
代码规范不该该作的事情
太细节的东西不要管,假设我告诉你天天出门先迈右脚会走好运,天天你能作的到吗?例如,有看到过下面的规范要求,除
非IDE工具能够自动帮我作到这些,我我的就以为,管的有些太细。
属于我的习惯的东西,不要强加在别人身上。但同一份代码,多我的编写,尽可能参照以前的风格。别让后人看一份代码的时候产生混乱的感受。
1 |
通常写法 |
代码规范解决不了代码腐化的问题
一个长期在维护的代码,时间长了,不免出一些问题。例如需求的反复变化,致使的代码的杂乱,原先的需求是作一个贷款超市,过几天需求变了,变成了信用卡超市,过几天又变成了信用卡还款及记帐工具,这些并非代码规范就能解决的。根本的处理方法是重构,或者新代码的分割。
小结
一个技术团队的气质的重要表现就是团队的代码规范。一个阿里出来的程序员,以后写出来的代码,必然也会有以前的习惯,由于都是受过同一个代码规范熏陶的,这就是团队气质的体现,每当看到小公司混乱代码的时候,就会想大厂和小厂的不一样。若是团队的开发都带有相同的气质,这个团队的统一性,战斗力就会是惊人的,外人看来,这就是团队而不是写代码的个体了。代码规范及其执行对于技术团队十分的重要,制定好代码规范,推行好代码规范,持续的优化,会让团队的效率大大的提高,是每个技术团队Leader的重要抓手。
什么样的代码规范才能获得程序员的承认?
http://www.cocoachina.com/programmer/20180327/22782.html
关于代码规范的一些参考
https://blog.csdn.net/mengdonghui123456/article/details/68066766
这多是史上最全的Android代码规范
https://www.jianshu.com/p/f5a55dff62f0
阿里巴巴java代码规范
https://github.com/alibaba/p3c/blob/master/%E9%98%BF%E9%87%8C%E5%B7%B4%E5%B7%B4Java%E5%BC%80%E5%8F%91%E6%89%8B%E5%86%8C%EF%BC%88%E8%AF%A6%E5%B0%BD%E7%89%88%EF%BC%89.pdf