野火烧不尽,春风吹又生。
代码中不协调的编程风格,就像野草一样有顽强的生命力,永远除不尽;
聪明的程序员立刻发现,靠人肉去Review不是长久之计。
斩草除根,以绝后患。
于是Lint
这样的静态代码检查工具中必不可少的一项就是编程风格,大家期望在流程中加一道关卡以一劳永逸地解决该问题。
堵不如疏
风格要保持一致
大家在编码或Review代码时,发现风格不协调很容易,凭本能就能做到,于是达成了第一条共识:在同一上下文内风格要保持一致。这个上下文灵活性也可以很大:从同一种编程语言要保持同一种风格,到同一个项目内,还可以小到同一个源文件内,甚至同一个函数内。一切全凭Review代码时的心情。
还是不服
风格保持一致,并没有解决问题,总有人跳出来抱怨受不了前任
的代码风格。
不患寡而患不均
争论到了这个层次,事情本身-编程风格
是什么已经不重要,重要的是-为什么是你的
,而不是我的
。
知其然,知其所以然
好的编程风格指南长什么样
- 告知WHY
好的编程风格会明确告诉你规约产生的背景及要解决的问题。
如Angular的Style Guide对每个Style
都有Why?
的条目解释;
Alibaba的Java Coding Guidelines有Note
条目。 - 分级
不是每条规约都一样重要,可适当抓大放小。
如Alibaba的Java Coding Guidelines依据约束力强弱及故障敏感性分为三个等级:Mandatory
,Recommended
andReference
。
Angular的Style Guide则分为Do
和Consider
两级。 - 给出正反例
一图胜千言
,一个例子可以让大家秒懂这条规约。
如Google Java Style Guide有正例和Exception
例子;
Angular Style Guide有正例和avoid
例子;
Alibaba的Java Coding Guidelines有Positive example
和Counter example
。
问题解决了吗
这样的风格指南像法律条文一样,做为编程智慧的结晶,倒是解决了争议
的问题。
知法犯法的问题也有执法机构来解决,可不知法
呢?