2. 有意义的命名
(1)使用可搜索的名称,而不是仅通过注释来搜索
例 number_of_tasks。而不是total,amount
(2)别用双关语,避免将同一单词用户不同目的,同一术语用于不同概念,遵循“一词一”义的规则
3. 函数
(1)只做一件事:做好一件事,只做一件事
(2)标识函数 true/false -->应该把函数一分为二
(3)使用异常代替返回错误码,这样错误处理代码就能从主路径代码中分离出来,从而得到简化
(4)如何写出这样的函数?先想到什么就先什么,然后打磨它,分解函数,修改名称,消除重复,缩短和重新安置方法,有时候还拆解类,最终组装好这些函数,一开始就按照规则写函数,可能也没几个人做得到
4. 注释
什么也比不上放置良好的注释来的有用,什么也不会比乱七八糟的注释更有本事搞乱一个模块,什么也不会比陈旧、提供错误信息的注释更有破坏性。
(1)注释不能美化糟糕的代码
(2)提供信息的注释
(3)放大,用来放大看来不合理之物的重要性
(3)归属与署名:源代码控制系统是最好的归属地
5. 格式
(1)垂直距离:变量声明尽可能靠近其使用位置,垂直顺序:调用者尽可能放在被调用者上面,这样函数就会有自然的顺序
7. 错误处理
(1)使用异常代替返回错误码
(2)别反悔null值,别传递null值,除非API要求你想她传递null值,否则尽可能避免传递null值
9. 单元测试
(1)一个测试一个断言
12. 迭进
(1)简单设计规则:重构
测试消除了对清理代码就会破坏代码的恐惧
(2)不可重复
(3)表达力:代码应当清晰的表达其作者的意图。代码写的越清晰,其他人花在理解代码的时间就越少,从而减少缺陷,缩短维护成本
16. 重构SerialDate
(1)首先,让它能工作
(2)让它做对
并发编程
(1)容忍错误,通过一些设置让错误不会导致损害
(2)死锁,不做循环等待,避免死锁的最常用的手段