代码应当易于理解
关键思想:代码应当易于理解
关键思想:代码的写法应当使别人理解它所需的时间最小化
表面层次的改进
把信息装到名字里
选择专业的词
get 与 fetch
size() 与 NumNodes()、MemoryBytes()
stop() 与 Kill()、Pause()、Resume()
选用更有表现力的单词:
避免泛泛的名字
因为懒惰而使用:tmp retval result
result 与 userList orderList cateList
循环迭代时的 i j k 变成更有意思的 cateLength xxxLen
用具体的名字代替抽象的名字
在给变量、函数或其它元素命名时,要把它描述得更具体而不是更抽象。
DISALLOW_EVIL_CONSTRUCTORS
DISALLOW_COPY_AND_ASSIGN
使用前缀或后缀来给名字附带更多信息
如果变量是一个度量,最好把名字带上单位
附带其它重要信息:
决定名字的长度
BEManager与BackEndManager
小的作用域可心使用短名字
经验原则:团队新成员是否能理解这个名字的含义?
doc document eval evaluation
丢掉没用的词:
convertToString() 与 ToString()
long2Str
利用名字的格式来表达含义
这个比较成熟,遵照规范和团队约定即可
不会误解的名字
关键思想:名字不要有歧义
objList.filter(“age > 18”);
objList.leaveAdults(“age>18”);
给布尔值命名
userIsAuthentiated
与使用者的期望相匹配
审美
来比较一下下面的代码 :
用换行来保持一致和紧凑
用方法来整理不规则的东西
在需要时使用列对齐
把代码分段落
使用一致的风格
该写什么样的注释
不要为了注释而注释
不要给不好的名字加注释——应该把名字改好
记录你的思想
加入“导演评论”
为代码中的瑕疵写注释
给常量加注释
意料中的提问
公布可能的陷阱
“全局观”注释
最后的思考-克服“作者心理阻滞”
写出言简意赅的注释
简化循环和逻辑
把控制流变得易读
条件语句中的参数顺序
if/else语句块的顺序
?:条件表达式
避免do/while循环
从函数中提前返回
最小化嵌套
通过提前返回来减少嵌套
减少循环内的嵌套
总结:
拆分超长表达式
用作解释的变量
总结变量
使用德摩根定理
找到更优雅的方式
拆分巨大的语句
优雅的例子:
变量与可读性
减少变量
没有价值的临时变量
减少中间结果
减少控制流变量
缩小变量的作用域
只写一次的变量更好
重新组织代码
抽取不相关的子问题
纯工具代码
其它用途代码
意料之外的好处
创建大量通用代码
项目专有的功能
简化已有接口
一次只做一件事
任务可以很小
应用“一次只做一件事情”原则
把想法变成代码
清楚的描述逻辑
用自然语言描述解决文案
少写代码
质疑和拆分你的需求
删除没用的代码
熟悉你周边的库