代码整洁之道
代码整洁之道
一、代码猴子
我们就是一群代码猴子,自以为领略了编程的真谛,写代码龙飞凤舞,上蹿下跳,对自己留下的一堆混乱,熟视无睹。
二、混乱代码的代价
混乱的代码降低团队生产力,趋向于零
三、什么是代码整洁
Bjarne Stroustrup(C++发明者)对整洁代码的理解: “我喜欢优雅和高效的代码,代码逻辑应当直接了当,叫缺陷难以隐藏;尽量减少依赖关系,使之便于维护;依据某种分层战略完善错误处理代码;性能调至最优,省得引诱别人做没有必要的优化,搞出一堆混乱来,整洁的代码之做好一件事。”
Ron Jeffries 对整洁代码的理解: 1.能通过所有的测试。 2.没有重复代码。 3.体现系统中的全部设计理念。
四、怎么写整洁的代码
1、编程态度
态度决定一切, 不端正的职业态度等同于职业自杀!
童子军军规:让营地比你来时更干净。
勒布朗法则:稍后等于永不 (later equals never)
程序员的头等大事不是“让代码能工作”,而是“让代码能沟通”
2、编程方法
2.1 格式
2.2 命名
- 名副其实
- 避免误导
- 使用可以搜索的变量
- 避免思维映射
- 类和对象名是名词短语,不能是动词
- 方法名是动词或动词短语
- 使用解决方案领域的名称
- 添加有意义的语境(增加一定前缀)
- 不要添加没有用的语境(任意增加前缀)
2.3 函数
- 短小,不要超过100行,最佳20行
- 只做一件事,做好一件事
- 函数中的语句都在同一个抽象层级上(向下读代码)
- 为函数取一个描述性的名字,不要害怕代码名称长
- 参数没有最好,一个次之,再次二个,没有特殊理由不要三个以上
- 分隔指令与查询
- 使用异常替代返回错误码(会产生IF嵌套;程序员维护不及时,复用之前错误码)
- 别重复自己
2.4 注释
注释 == 失败! 注释跟不上代码的变化,所以注释会说谎!
- 注释不能美化糟糕的代码
- 用代码来阐述
- 好注释(对意图的解释、警示后来者、TODO注释)
- 坏注释(误导性注释、规矩性注释、日志注释、废话注释,注释掉代码、位置注释、括号后面的注释)
2.5 格式
- 向报纸学习,自顶向下阅读。顶部是高层次的概念和算法,向下细节逐步展开。(垂直方向)
- 每个空白行都是一个独立的线索,标识出新的独立概念(垂直方向)
- 空白行隔开了概念,相反紧密的代码要互相靠近(垂直方向)
- 操作符两边使用空白符,强调左边和右边,加强分隔效果(水平方向)
- 代码宽度不要超过屏幕边线(水平方向)
2.6 异常
错误处理很重要,但是他搞乱了代码逻辑,就是错误的做法
- 使用不可控异常,可控异常违背了开闭原则
- 各处异常发生的环境说明
- 不要返回NULL值,给调用增加检查工作量
- 不要传递NULL值
2.7 边界
对第三方代码进行学习性测试; 将第三方代码隔离,使用Adapter模式适配符合自身业务逻辑的接口
2.7 单元测试
- 在编写生产代码之前先编写测试用例
- 保持测试代码整洁(快速、独立、可重复)
2.8 类的组织
- 类应该短小(单一权责)