代码规范的艺术

> # 可读性基本定理

---

1. 代码的写法应当使别人理解它所需的时间最小化

2. 可读性定理总是先于其他的条例或原则

3. 大开大脑中编码时需要注意可读性的呢一部分

##### 第一部分

_表面层次的改进_ 名字、注释、格式

**把信息装到名字里**

1. 选择专业的词

2. 找到鞥有表现力的词

3. 避免像tmp和retval这样泛泛的名字

4. 循环迭代器

5. 对于空泛名字的裁定

6.用具体的名字代替抽象的名字

7.为名字附带更多信息

8.带单位的值

9.附带其他重要属性

**名字应该有多长**

1. 在小的作用域里可以使用短的名字

2. 代码补全-输入长名字,不再是问题

3. 首字母缩略和缩写

4. 丢掉没用的词

**利用名字的格式来传递含义**

1. 其他格式规范 构造函数首字母大写,其他函数首字母小写

>  总结 使用专业的单词、避免空凡的名字、使用具体的名字来更细致的描述事物、给变量名带上重要的细节、为作用域大的名字采用更长的名字、有目的使用大小写,下划线等。

##### 不会误解的名字

关键思想-这个名字会被别人误解成其他的含义吗

1. 推荐用min和max来表示极限

2. 推荐用first和last来表示包含的范围

3. 推荐用begin和end来表示包含/排除范围

4. 给bool值命名

5. 与使用者的期望相匹配

6. 如何权衡多个备选名字

##### 审美

> 段落的长度、栏的宽度、文章的顺序、封面

1. 使用一致的布局,让读者很快就习惯这种风格

2. 让相似的代码看上去相似

3. 把相关的代码行分组,形成代码块

1. 重新安排换行来保持一致和紧凑

2.用方法来整理不规则的东西

3.在需要时使用列对齐

4.选一个有意义的顺序,始终一致的使用它

5.把声明按块组织起来

6.把代码分成“段落”

7.个人风格和一致性  一致的风格比“正确”的风格重要

##### 读写什么样的注释

关键思想 注释的目的是尽量帮助读者了解的和作者一样多

**什么不需要注释**

不要为那些从代码本身就能快速推断的事实写注释

**不要为了注释而注释**

**不要给不好的名字加注释-应当把名字改好**

**记录你的想法**

**加入“导演评论”**

**为代码中的瑕疵写注释**

**给常量加注释**

**站在读者的角度**

1. 意料之中的提问

2. 公布可能的陷阱

3. “全局观”注释

4. 总结性注释

**最后的思考---克服“作者心理阻滞”**

##### 写出言简意核的注释

关键思想--注释应当有很高的信息/空间率

1. 让注释保持紧凑

2. 避免使用不明确的代词

3. 润色粗糙的句子

4. 精确的描述函数的行为

5. 用输入/输出例子来说明特别的情况

6. 声明代码的意图

7. “具名函数参数”的注释

8. 采用信息含量高的词

##### 简化循环和逻辑

**把控制流变得易读**

关键思想--把条件、循环以及其他对控制流的改变做的越“自然越好”。运用一种方式使读者不用停下来重读你的代码

1. 条件语句中参数的顺序

2. if/else语句块的顺序

3. ?:条件表达式  最小化理解它所需的时间

4. 避免do/while循环

5. 从函数中提前返回

6. 臭名昭著的goto

7. 最小化嵌套

8. 嵌套是如何累积而成的

9. 通过提早返回来减少嵌套

10. 减少循环内的嵌套

##### 拆分超长的表达式

关键思想--把你的超长表达式拆分成更容易理解的小块

1. 用作解释的变量

2. 总结变量

3. 使用德摩根定理

4. 滥用短路逻辑

5. 找到更优雅的方式

6. 拆分巨大的语句

7. 另一个简化表达式的创意方法

##### 变量和可读性

变量的缺点

**减少变量**

1. 没有价值的临时变量

2. 减少中间结果

3. 减少控制流变量

4. 缩小变量的作用域

5. C++中if的作用域

6. 在JavaScript中创建“私有”变量

7. JavaScript全局作用域

8. 在python和JavaScript中没有嵌套的作用域

9. 把定义向下移

10. 只写一次的变量更好

##### 重新组织代码

函数级别的代码改动

1. 抽取不相关的子问题

2. 纯工具代码

3. 其他多用途代码

4. 意料之外的好处

5. 创建大量通用的代码

6. 项目专有的功能

7. 简化已有接口

8. 按需重塑接口

9. 过犹不及

##### 一次只做一件事

1. 任务可以很小

2. 从对象中抽取值

3. 更大型的例子

4. 进一步的改进成

##### 把想法变成代码

1. 清楚地描述逻辑

2. 了解函数库是有帮助的

3. 把这个方法应用于更大的问题

##### 少写代码

关键思想--最好读的代码就是没有代码

1. 别费神实现呢各功能---你不会需要他

2. 质疑和拆分你的需求

3. 保持小代码库

4. 熟悉你周边的库

5. 为什么重用库有这么大的好处

##### 精选话题

**测试与可读性**

1. 使测试易于阅读和维护

2. 这段测试什么地方不对

3. 使这个测试更可读

4. 创建最小的测试声明

5. 实现定制的“微语言”

6. 让错误信息具有可读性

7. 更高级的assert()

8. 手工打造错误信息

9. 选择好的测试输入

10. 简化输入值

11. 一个功能的多个测试

12. 为测试函数命名

13. 那个测试有什么地方不对

14. 对测试较好的开发方式

##### 设计并改进“分钟、小时计数器”

**定义类接口**

1. 改进命名

2. 改进注释

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容