编写可读代码的艺术
写让人理解的代码
代码的写法应该使理解代码的人所需要的时间最小化
变量名
- 使用专业的词
- 避免使用空泛的词
- 给变量名带上附加信息
- 为作用域更大的变量起一个长的名字
- 有目的的使用大小写和下划线
让人不会误解的名字
不会误解的名字是最好的名字————阅读代码的人应该理解你的本意,并且不会有其他的理解
- 表示上下限:max min
- 表示包含的范围:first last
- 表示包含、排除某个范围:begin end
命名一个bool类型的值,应该使用 is 、has这样的词来明确它所表达的含义。避免使用反义词,比如disable。
要小心用户对特定词的期望,例如用户会认为get或者size 是一个轻量的方法。
写代码也需要审美
- 如果多个代码块做同样的事,尝试让他们有同样的剪影
- 把代码块按照 列 对齐可以让代码更容易阅读
- 如果一段代码中用到了A,B,C,那么在使用它们的下方就应该保持顺序一致性
- 使用空行将大段的代码分成逻辑上的“段落”
该写什么样的注释?
注释的目的是帮助读代码的人了解作者在写代码时的思想。
什么地方不需要注释
- 能从代码本身中快速推断的事实
- 用来装饰垃圾点(比如拗口的方法名),实际上应该把名称修改好
记录你的想法
- 为什么代码写成这样而不是另一个样子的内在理由(“指导性批注”)
- 代码中的不足,使用像TODO或者XXX这样的标记
- 常量背后的意义,为什么是这个值?
在读者的立场思考
- 预料到代码中哪些部分会让读者说:“哎嘿?什么鬼”给它们加上注释
- 为小白意料之外的行为加注释
- 在文件、类级别上使用“全局观”注释来解释所有部分是如何一起工作的
- 用注释总结代码块, 让读者不会迷茫在细节里
如何写注释
- 不管你心里在想什么,先把它记录下来
- 读一下这段注释,看看它有什么需要改进的
- 不断改进
写言简意赅的注释
- 当像“这里”和“it”这样的代词可能指代多个事物时,避免使用它们
- 尽量精确的描述方法行为
- 在注释中用精心挑选的输入/输出例子进行说明
- 声明代码的高层次意图,而非明显的细节
- 用含义丰富的词来使注释更加简洁
简化流程让代码容易阅读
- 写一个比较时,把改变的值放在左边,把确定的值放在右边
- 可以重新排列if else 代码块,优先处理正确的,简单的逻辑。有时这些准则会冲突,当不冲突时,遵循这些经验法则
- 像三目运算符,do while循环经常会导致代码可读性变差,最好不要使用它们,因为总是有更整洁的方式
- 嵌套的代码块需要花一些时间去理解,每层新的嵌套都会给读者“思维栈”push一条数据,应该让它们变得“线性”,来避免深层嵌套
- 提早返回可以让代码更整洁
拆分又臭又长的表达式
引入“解释变量”代替较长的子表达式,有三个好处
- 它把巨大的表达式拆分成一个小段
- 通过简单的名字来描述一个子表达式,让代码文档化
- 它帮助读者识别代码中重要的概念
用德摩根定理来操作逻辑表达式
变量与可读性
- 减少变量,通过立刻处理结果来消除中介变量
- 减少变量作用域,作用域越小越好
- 变量只写一次最好,只设置一次的变量会让代码变得更加容易理解
抽取无关的代码
一次只做一件事
把想法变成代码
少写代码
参考
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.