再谈谈代码规范的事

  谈起代码质量,可读性,可维护性等,老是说,咱们要有一套代码规范来严格执行。我经历的公司,大多都有代码规范,至于最终代码规范有没有发挥做用么,你猜……
  代码规范从制定到实施到发挥做用,其实仍是有不少小的细节,今天我就来讲说我看到的一些细节。html

代码规范的自己的问题

从规范目标细节的角度,代码规范分为:前端

  • 注释
  • 命名
  • 缩进空格
  • 语句格式
  • 规模
  • 可靠性
  • 语言特殊项

代码规范从实施的角度,我分了几类:java

  1. 简单易执行
    命名、注释就是简单易执行
  1. 通常可执行
    操做符++和— —操做符的应用是否符合规范?
    只读不可写的常量加上readonly或者const
  1. 有难度自行掌控
    一屏原则:一个方法体的代码幅应该在一屏比较和合理;逻辑复杂的代码能够抽离出方法体;
    int的返回值是否合理?(负值为失败,非负值成功)
  1. 强迫症规范
    不少关于空格类的规范,就属于强迫症规范

@Class的写法
写法模板:@class class1, class2;
建议的写法git

1
@class UIView, UIImage;

 

不建议的写法程序员

1
2
@class UIPress;
@class UIPressesEvent;

 

以上的规范,纯属编写规范的人的我的喜爱,写法上我以为没有对错,有一些过线。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
2
3
for(int i=0;i<max;i++){
r[i]=0;
}

 

  而一样的,C#的著名IDE Visual Studio就会帮.Net程序员养成,{}分行的习惯(默认配置是这样的)

1
2
3
4
for(int i=0;i<max;i++)
{
r[i]=0;
}

 

  渐渐的,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
    2
    3
    4
    5
    通常写法
    app_name="支付宝";

    规范要求,为了可读性,先后须要加入空格
    app_name = "支付宝";
  • 代码规范解决不了代码腐化的问题
      一个长期在维护的代码,时间长了,不免出一些问题。例如需求的反复变化,致使的代码的杂乱,原先的需求是作一个贷款超市,过几天需求变了,变成了信用卡超市,过几天又变成了信用卡还款及记帐工具,这些并非代码规范就能解决的。根本的处理方法是重构,或者新代码的分割。

  • 代码规范也会与时俱进
      技术更新很快,工程过程当中遇到的问题也是层出不穷,所以,代码规范也不会是一招定论的,须要不断地更新、补充、完善,这样才能与时俱进,保持生命力。举例说JAVA8中引入了Lambda表达式,对于半路出家的程序员,这种表达式若是写的抽象一些,可读性会出点问题的。有必要对于Lambda写法上作必定的规范。还有如C#和js中引入的await和async的异步写法,没学过直接看代码的时候,确实会发生不能理解的问题,说明尚未成熟规范写法,也没有深刻学习语法的时候,新技术经常会致使可读性降低。

小结

  一个技术团队的气质的重要表现就是团队的代码规范。一个阿里出来的程序员,以后写出来的代码,必然也会有以前的习惯,由于都是受过同一个代码规范熏陶的,这就是团队气质的体现,每当看到小公司混乱代码的时候,就会想大厂和小厂的不一样。若是团队的开发都带有相同的气质,这个团队的统一性,战斗力就会是惊人的,外人看来,这就是团队而不是写代码的个体了。代码规范及其执行对于技术团队十分的重要,制定好代码规范,推行好代码规范,持续的优化,会让团队的效率大大的提高,是每个技术团队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

相关文章
相关标签/搜索