代码规范20条

大到项目名、模块名、包名、对外暴露的接口,小到类名、函数名、变量名、参数名。

上一节课中我们讲了命名和注释,这一节课我们来讲一下代码风格(Code Style)。说起
代码风格,我们其实很难说哪种风格更好。最重要的,也是最需要我们做到的,是在团队、
项目中保持风格统一,让代码像同一个人写出来的,整齐划一。这样能减少阅读干扰,提高
代码的可读性。这才是我们在实际工作中想要实现的目标。
关于代码风格,我总结了 6 点我认为最值得关注的,今天跟你一块讨论学习一下。
1. 类、函数多大才合适?
总体上来讲,类或函数的代码行数不能太多,但也不能太少。类或函数的代码行数太多,一
个类上千行,一个函数几百行,逻辑过于繁杂,阅读代码的时候,很容易就会看了后面忘了
  下载APP 
前面。相反,类或函数的代码行数太少,在代码总量相同的情况下,被分割成的类和函数就
会相应增多,调用关系就会变得更复杂,阅读某个代码逻辑的时候,需要频繁地在 n 多类
或者 n 多函数之间跳来跳去,阅读体验也不好。
那一个类或函数有多少行代码才最合适呢?
我们在第 15 讲中提到过,要给出一个精确的量化值是很难的。当时我们还跟做饭做了类
比,对于“放盐少许”中的“少许”,即便是大厨也很难告诉你一个特别具体的量值。
对于函数代码行数的最大限制,网上有一种说法,那就是不要超过一个显示屏的垂直高度。
比如,在我的电脑上,如果要让一个函数的代码完整地显示在 IDE 中,那最大代码行数不
能超过 50。这个说法我觉得挺有道理的。因为超过一屏之后,在阅读代码的时候,为了串
联前后的代码逻辑,就可能需要频繁地上下滚动屏幕,阅读体验不好不说,还容易出错。
对于类的代码行数的最大限制,这个就更难给出一个确切的值了。我们在第 15 讲中也给出
了一个间接的判断标准,那就是,当一个类的代码读起来让你感觉头大了,实现某个功能时
不知道该用哪个函数了,想用哪个函数翻半天都找不到了,只用到一个小功能要引入整个类
(类中包含很多无关此功能实现的函数)的时候,这就说明类的行数过多了。
2. 一行代码多长最合适?
在Google Java Style Guide文档中,一行代码最长限制为 100 个字符。不过,不同的编
程语言、不同的规范、不同的项目团队,对此的限制可能都不相同。不管这个限制是多少,
总体上来讲我们要遵循的一个原则是:一行代码最长不能超过 IDE 显示的宽度。需要滚动
鼠标才能查看一行的全部代码,显然不利于代码的阅读。当然,这个限制也不能太小,太小
会导致很多稍长点的语句被折成两行,也会影响到代码的整洁,不利于阅读。
3. 善用空行分割单元块
对于比较长的函数,如果逻辑上可以分为几个独立的代码块,在不方便将这些独立的代码块
抽取成小函数的情况下,为了让逻辑更加清晰,除了上一节课中提到的用总结性注释的方法
之外,我们还可以使用空行来分割各个代码块。
除此之外,在类的成员变量与函数之间、静态成员变量与普通成员变量之间、各函数之间、
甚至各成员变量之间,我们都可以通过添加空行的方式,让这些不同模块的代码之间,界限
更加明确。写代码就类似写文章,善于应用空行,可以让代码的整体结构看起来更加有清
晰、有条理。
4. 四格缩进还是两格缩进?
“PHP 是世界上最好的编程语言?代码换行应该四格缩进还是两格缩进?”这应该是程序
员争论得最多的两个话题了。据我所知,Java 语言倾向于两格缩进,PHP 语言倾向于四格
缩进。至于到底应该是两格缩进还是四格缩进,我觉得这个取决于个人喜好。只要项目内部
能够统一就行了。
当然,还有一个选择的标准,那就是跟业内推荐的风格统一、跟著名开源项目统一。当我们
需要拷贝一些开源的代码到项目里的时候,能够让引入的代码跟我们项目本身的代码,保持
风格统一。
不过,我个人比较推荐使用两格缩进,这样可以节省空间。特别是在代码嵌套层次比较深的
情况下,累计缩进较多的话,容易导致一个语句被折成两行,影响代码可读性。
除此之外,值得强调的是,不管是用两格缩进还是四格缩进,一定不要用 tab 键缩进。因
为在不同的 IDE 下,tab 键的显示宽度不同,有的显示为四格缩进,有的显示为两格缩
进。如果在同一个项目中,不同的同事使用不同的缩进方式(空格缩进或 tab 键缩进),
有可能会导致有的代码显示为两格缩进、有的代码显示为四格缩进。
5. 大括号是否要另起一行?
左大括号是否要另起一行呢?这个也有争论。据我所知,PHP 程序员喜欢另起一行,Java
程序员喜欢跟上一条语句放到一起。具体代码示例如下所示:

 // PHP class ClassName { public function foo() { 
// method body } }// Java public class ClassName {
我个人还是比较推荐,将括号放到跟语句同一行的风格。理由跟上面类似,节省代码行数。
但是将大括号另起新的一行的方式,也有它的优势。这样的话,左右括号可以垂直对齐,哪
些代码属于哪一个代码块,更一目了然。
不过,还是那句话,大括号跟上一条语句在同一行,还是另起新的一行,只要团队统一、业
内统一、跟开源项目看齐就好了,没有绝对的优劣之分。
6. 类中成员的排列顺序
在 Java 类文件中,先要书写类所属的包名,然后再罗列 import 引入的依赖类。在
Google 编码规范中,依赖类按照字母序从小到大排列。
在类中,成员变量排在函数的前面。成员变量之间或函数之间,都是按照“先静态(静态函
数或静态成员变量)、后普通(非静态函数或非静态成员变量)”的方式来排列的。除此之
外,成员变量之间或函数之间,还会按照作用域范围从大到小的顺序来排列,先写 public
成员变量或函数,然后是 protected 的,最后是 private 的。
不过,不同的编程语言中,类内部成员的排列顺序可能会有比较大的差别。比如 C++ 中,
成员变量会习惯性放到函数后面。除此之外,函数之间的排列顺序,会按照刚刚我们提到的
作用域的大小来排列。实际上,还有另外一种排列习惯,那就是把有调用关系的函数放到一
块。比如,一个 public 函数调用了另外一个 private 函数,那就把这两者放到一块。

你可能感兴趣的:(设计模式)