* [可读性的重要性](#可读性的重要性)
* [用名字表达代码含义](#用名字表达代码含义)
* [名字不能带来歧义](#名字不能带来歧义)
* [良好的代码风格](#良好的代码风格)
* [编写注释](#编写注释)
* [如何编写注释](#如何编写注释)
* [提高控制流的可读性](#提高控制流的可读性)
* [拆分长表达式](#拆分长表达式)
* [变量与可读性](#变量与可读性)
* [抽取函数](#抽取函数)
* [一次只做一件事](#一次只做一件事)
* [用自然语言表述代码](#用自然语言表述代码)
* [减少代码量](#减少代码量)
# 可读性的重要性
编程有很大一部分时间是在阅读代码,不仅要阅读自己的代码,而且要阅读别人的代码。因此,可读性良好的代码能够大大提高编程效率。
可读性良好的代码往往会让代码架构更好,因为程序员更愿意去修改这部分代码,而且也更容易修改。
只有在核心领域为了效率才可以放弃可读性,否则可读性是第一位。
# 用名字表达代码含义
一些比较有表达力的单词:
| 单词 | 可替代单词 |
| --- | --- |
| send | deliver、dispatch、announce、distribute、route |
| find | search、extract、locate、recover |
| start| launch、create、begin、open|
| make | create、set up、build、generate、compose、add、new |
使用 i、j、k 作为循环迭代器的名字过于简单,user_i、member_i 这种名字会更有表达力。因为循环层次越多,代码越难理解,有表达力的迭代器名字可读性会更高
为名字添加形容词等信息能让名字更具有表达力,但是名字也会变长。名字长短的准则是:作用域越大,名字越长。因此只有在短作用域才能使用一些简单名字。
# 名字不能带来歧义
起完名字要思考一下别人会对这个名字有何解读,会不会误解了原本想表达的含义。
用 min、max 表示数量范围;用 first、last 表示访问空间的包含范围,begin、end 表示访问空间的排除范围,即 end 不包含尾部。