写好代码的注意点(代码整洁之道学习笔记)

原则

写代码时注意,写好代码后,优化优化优化、重构重构重构

稍后等于永不(Later equals never)

命名

  1. 名副其实
  2. 避免误导
  3. 做有意义的区分
  4. 使用读的出来的名称
  5. 使用可搜索的名称
  6. 避免使用编码
  7. 避免思维映射
  8. 类名和对象名应该是名词或名词短语
  9. 方法名应该是动词或动词短语
  10. 每个概念对应一个词
  11. 不用双关语
  12. 使用解决方案领域名称
  13. 使用源自所涉及问题领域的名称
  14. 添加有意义的语境,不要添加没用的语境

函数

  1. 短小(20行封顶)
  2. 只做一件事情
  3. 每个函数一个抽象层级(自顶向下)
  4. 使用描述性名称
  5. 函数参数三个一下
  6. 尽量避免使用输出参数
  7. 使用异常替代返回错误码
  8. 抽离try/catch代码块形成函数
  9. 消除重复

如何写出好的函数

先将代码写完,在打磨代码,分解函数,修改名称,消除重复

注释

别给糟糕的代码加注释

  1. 注释不能美化糟糕的代码
  2. 用代码诠释
  3. 唯一的好注释是想办法不去写注释
  4. 允许的注释:法律信息、提供信息的注释、对意图的解释、阐释、警示、TODO注释、放大重要性、公共API中的javadoc
  5. 坏的注释:喃喃自语、多余的注释、误导性注释、循规式注释、日志式注释、废话注释、注释掉的代码、HTML注释、系统级的信息、信息过多、不明显的联系、函数头、非公共代码中的javadoc
  6. 能用函数或变量时就别用注释

格式

  1. 短文件比长文件易于理解(一般200-500行)
  2. 源文件最顶部应该给出高层级的概念和算法
  3. 每组代码表示一个完整的思路,思路之间使用空白行分割
  4. 紧密相关的代码应该相互靠近
  5. 变量申明应尽可能靠近其使用位置
  6. 实体变量应该在类的顶部申明(被该类的大多数方法使用)
  7. 相关函数,调用的方法放在被调用方法的上面
  8. 代码行字数不超过120字

对象和数据结构

  1. 对象暴露行为,隐藏数据
  2. 数据抽象(使用接口)、使用赋值器
  3. 数据传送对象(DTO):只有公共变量、没有函数的类

错误处理

  1. 使用异常而非返回码
  2. 先写try-catch-finally语句
  3. 使用不可控异常(unchecked exception)
  4. 给出异常发生的环境说明
  5. 依调用者需要定义异常类
  6. 别返回null值,改为抛出异常或返回特例对象
  7. 别传递null值,改为检测到null值,异常抛出

类应该从一组变量列表开始,先写公共静态常量,然后是私有静态变量,以及私有实体变量,很少会有公共变量。公共函数应在变量列表之后。

  1. 类应该短小
  2. 单一权值原则
  3. 内聚(类中只有少量的实体变量,类中的每个办法都操作一个或多个这种变量,若类中每个变量都被每个方法使用,则内聚性最大)
  4. 保持内聚性就会得到许多短小的类(把大类拆成许多短小的类)
  5. 修改代码时,通过扩展系统而非修改现有代码来添加新特性,添加新特性时尽量减少对原有代码的修改

系统

  1. 将系统的构造和使用分开(方法:1、将全部构造过程搬迁到main中,2、使用工厂,3、依赖注入)

迭进(通过迭进设计达到整洁设计)

  1. 运行所有测试
  2. 重构
  3. 不可重复
  4. 提高表达力
  5. 保持类和函数短小的前提下,尽可能减少类和方法

并发编程

  1. 并发防御原则(单一权责原则、限制数据作用域、避免共享数据,可使用数据副本、线程尽可能独立、)
  2. 保持同步区域微小
  3. 测试线程代码(编写可插拔的线程代码、编写可调整的线程代码、运行多于处理器数量的线程、在不同平台上运行、装置试错代码,多测异常情况、自动化)

逐步改进

我们每个人都有责任把模块改进得比发现时更整洁

Junit

重构

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值