我的编码规范

开篇闲扯

距离上一次更新已经有快三个月了,这三个月我都在干什么呢?首先是继续实习,因为一些原因,本来计划的三个月实习变成了四个月。在实习的过程中逐步接手了一些维护的工作,并提交了不少代码。7月6号正式入职以后,我加入了一个Amazing的新项目的创建,目前我们做出来的Demo真是非常的Amazing。不过可惜的是,这样一个项目在最近几年是不会对外公布的。

在6月之前,每晚回家就是做毕设了,这段时间休息的都比较晚,头发都白了很多。

还有就是给极客学院录课,第一个系列课程《定向爬虫入门》已经全部录制完毕了,一共8课,大家可以在about me 里面找到前7课的链接,最后一课目前正在后期制作当中,上线以后会更新链接。接下来我会讲解远程控制软件的编写,欢迎大家在极客学院关注我,我的名字叫kingname~

闲话完毕,那我们开始正题。

##本题由来
其实以前我是不太注意编码风格的,觉得程序可以运行了就行。甚至网上还有一种说法:

如果你急急忙忙写一个程序,都没有注重编码规范,程序可能一次就跑通了;但是如果你仔细编码,而且还把单元测试做的非常完善,很有可能程序会出现大bug,而且还难以找到原因。

然而在我实习的过程中,读了公司的很多代码,才发现编码规范是如此的重要,以至于可以显著影响对代码的理解。而且由于在部门里面code review做的比较严格,因此代码的风格不统一的话,是不能merge的,于是在多次提交代码以后渐渐的总结出了一些规律。

##变量命名
在我大一学编程的时候,老师告诉我们变量命名最后使用匈牙利命名法,例如,经常出现hszStr、istuNum之类的变量名,如果对代码不熟悉的话,都不知道是什么意思。

现在我们并不使用匈牙利命名法,而是直接将变量的含义通过单纯完整拼写处理。例如:

deviceSerialDict: 用于保存设备串号的字典
deviceSerialDictList: 用于保存设备串号字典的列表
unusedSerialNumList: 未使用的序列号列表

我们约定:

  • 变量名首字母小写
  • 多个单词的构成的变量,从第二个开始首字母大写
  • 缩写词做单词处理,例如ACM在变量名中应该写为Acm而不是ACM
  • 常量大写,每个单词使用_下划线分割
  • 不允许出现Magic Number
  • 使用名词或者动宾结构

##类与方法

使用面向对象编程,这一点在我做毕业设计的程序时,帮了我大忙,大大减轻了我的工作压力。

我们的风格其实有点像Java了,文件名和类名相同,如果一个文件里面有多个类,那文件名与主要的类名相同。

我们约定:

  • 非私有的方法,首字母小写,动宾结构,例如getSerialNum
  • 对于和类本身没有什么大关系的方法,要使用@staticmethod
  • 只有类自己使用的方法需要设为私有,也就是名称前加两个下划线

##代码细节

  • 逗号后面要有一个空格
  • 每一行代码后面不能有空格
  • 文件的最后要有一个空行
  • 等号左右都需要有空格,但是作为参数的时候不需要空格
  • 方法的参数大于6个,则使用列表或者字典来传递

##总结

挂一漏万,以上的规范使用Pylint都可以帮忙检查出来。没有说到的地方请大家补充,除了以上的规范以外,还有Python自己本身的编码规范,请戳->https://www.python.org/dev/peps/pep-0008/

最近重构了MCC,请大家对比

https://github.com/kingname/MCC

与 重构之前

https://github.com/kingname/MCC/tree/c806c3ccfd0c0585d51caa9f85e6867e0f3ee8cb

的区别。