编写可读代码的艺术

写让人理解的代码

代码的写法应该使理解代码的人所需要的时间最小化

变量名

  1. 使用专业的词
  2. 避免使用空泛的词
  3. 给变量名带上附加信息
  4. 为作用域更大的变量起一个长的名字
  5. 有目的的使用大小写和下划线

让人不会误解的名字

不会误解的名字是最好的名字------------阅读代码的人应该理解你的本意,并且不会有其他的理解

  • 表示上下限:max min
  • 表示包含的范围:first last
  • 表示包含、排除某个范围:begin end

命名一个bool类型的值,应该使用 is 、has这样的词来明确它所表达的含义。避免使用反义词,比如disable。

要小心用户对特定词的期望,例如用户会认为get或者size 是一个轻量的方法。

写代码也需要审美

  1. 如果多个代码块做同样的事,尝试让他们有同样的剪影
  2. 把代码块按照 列 对齐可以让代码更容易阅读
  3. 如果一段代码中用到了A,B,C,那么在使用它们的下方就应该保持顺序一致性
  4. 使用空行将大段的代码分成逻辑上的"段落"

该写什么样的注释?

注释的目的是帮助读代码的人了解作者在写代码时的思想。

什么地方不需要注释

  • 能从代码本身中快速推断的事实
  • 用来装饰垃圾点(比如拗口的方法名),实际上应该把名称修改好

记录你的想法

  • 为什么代码写成这样而不是另一个样子的内在理由("指导性批注")
  • 代码中的不足,使用像TODO或者XXX这样的标记
  • 常量背后的意义,为什么是这个值?

在读者的立场思考

  • 预料到代码中哪些部分会让读者说:"哎嘿?什么鬼"给它们加上注释
  • 为小白意料之外的行为加注释
  • 在文件、类级别上使用"全局观"注释来解释所有部分是如何一起工作的
  • 用注释总结代码块, 让读者不会迷茫在细节里

如何写注释

  1. 不管你心里在想什么,先把它记录下来
  2. 读一下这段注释,看看它有什么需要改进的
  3. 不断改进

写言简意赅的注释

  • 当像"这里"和"it"这样的代词可能指代多个事物时,避免使用它们
  • 尽量精确的描述方法行为
  • 在注释中用精心挑选的输入/输出例子进行说明
  • 声明代码的高层次意图,而非明显的细节
  • 用含义丰富的词来使注释更加简洁

简化流程让代码容易阅读

  1. 写一个比较时,把改变的值放在左边,把确定的值放在右边
  2. 可以重新排列if else 代码块,优先处理正确的,简单的逻辑。有时这些准则会冲突,当不冲突时,遵循这些经验法则
  3. 像三目运算符,do while循环经常会导致代码可读性变差,最好不要使用它们,因为总是有更整洁的方式
  4. 嵌套的代码块需要花一些时间去理解,每层新的嵌套都会给读者"思维栈"push一条数据,应该让它们变得"线性",来避免深层嵌套
  5. 提早返回可以让代码更整洁

拆分又臭又长的表达式

引入"解释变量"代替较长的子表达式,有三个好处

  1. 它把巨大的表达式拆分成一个小段
  2. 通过简单的名字来描述一个子表达式,让代码文档化
  3. 它帮助读者识别代码中重要的概念
    用德摩根定理来操作逻辑表达式

变量与可读性

  1. 减少变量,通过立刻处理结果来消除中介变量
  2. 减少变量作用域,作用域越小越好
  3. 变量只写一次最好,只设置一次的变量会让代码变得更加容易理解

抽取无关的代码

一次只做一件事

把想法变成代码

少写代码

参考

  1. https://www.bilibili.com/video/BV1qs411L7tH/?p=4
相关推荐
这个DBA有点耶3 小时前
为什么UPDATE比SELECT危险得多?锁范围等于扫描行数
数据库·架构·代码规范
沈麽鬼4 小时前
纸上代码
代码规范
深圳老胡2 天前
STM32CubeMX 生成 CMake 工程,用 VSCode 编译与调试的完整流程
笔记·stm32·单片机·代码规范
星星泡饭吃2 天前
【信息安全】越权防护设计评审指南
代码规范
GlobalSign数字证书2 天前
申请 EV 代码签名证书需要准备哪些材料?
代码规范
深圳老胡2 天前
STM32F4 OTA 升级双 App 方案设计与实现
笔记·stm32·单片机·代码规范
深圳老胡2 天前
STM32F4 OTA升级:单App与双App方案优缺点对比
笔记·stm32·单片机·代码规范
这个DBA有点耶3 天前
Change Buffer深入:二级索引写入的隐形加速器与它的代价
数据库·mysql·代码规范
知守观4 天前
一个半天需求干了三天:代码腐化的五个信号与自查命令
java·后端·代码规范
深圳老胡4 天前
STM32 MCU 国产替代型号简介
笔记·stm32·单片机·代码规范