代码质量
目录目录 第第1 1篇篇 代码格局代码格局 第第1 1章章 整洁代码之道与编码规范整洁代码之道与编码规范 1.1.代码整洁的核心原则代码整洁的核心原则 ①选择正确的工具①选择正确的工具 --IDE--IDE开发工具开发工具 ----软件工厂的开发工具软件工厂的开发工具- -搭积木的组装方式搭积木的组装方式 ----参数化的代码块(优秀的、经过测试的)参数化的代码块(优秀的、经过测试的) ②优化信噪比②优化信噪比 ----编程语言的表达方式编程语言的表达方式 ----长语句来表达一个的含义长语句来表达一个的含义 ③尽最大努力写出能够自解释的代码③尽最大努力写出能够自解释的代码 ----自圆其说自圆其说 ----变量的命名?变量的命名? 2.2.编码规范的基础规则编码规范的基础规则 ①编程规范文档的目录结构①编程规范文档的目录结构 --VS2010--VS2010代码分析技术代码分析技术- -内置编程规范内置编程规范 --MSDN--MSDN定位相关的规范案例定位相关的规范案例 ②记忆规范②记忆规范 ----华为的编程规范的案例华为的编程规范的案例-Demo-Demo ----源于本企业的缺陷库源于本企业的缺陷库- -发现经验发现经验 ----每天自己坚持从企业的缺陷库中看每天自己坚持从企业的缺陷库中看 1-21-2个案例个案例 ----将文档读薄将文档读薄- -编程规范归纳总结编程规范归纳总结 3.3.有效的命名规则是代码整洁的基础有效的命名规则是代码整洁的基础 ①①JavaJava与与 中的命名方式中的命名方式 ----知名达意知名达意 ②英文单词的选择②英文单词的选择 ----简单易懂的英文单词简单易懂的英文单词 --java API--java API类库类库-API-API名称名称 4.4.注释规则与代码内嵌文档的规则注释规则与代码内嵌文档的规则 ①逐句注释与逐段的注释选择①逐句注释与逐段的注释选择 ②注释的语言描述方式②注释的语言描述方式 ----站在代码阅读者的视角来描述站在代码阅读者的视角来描述 5.5.变量生命周期规则变量生命周期规则 ①变量在代码中的散落?①变量在代码中的散落? ②变量的段落的散落方式②变量的段落的散落方式 6.6.控制流编写规则控制流编写规则 ①分支或循环的纵深层次越少越好①分支或循环的纵深层次越少越好 ----减少锯齿的深度减少锯齿的深度 ②分支与面向对象的思维②分支与面向对象的思维- -重构重构 7.7.代码风格代码风格 ①代码风格是以阅读者的视角来定义自己的风格①代码风格是以阅读者的视角来定义自己的风格 ②归纳总结的自己的代码风格与企业级编程规范中代码风格对比②归纳总结的自己的代码风格与企业级编程规范中代码风格对比 ----改变自己的编程风格改变自己的编程风格 第第2 2章章 防御性编程代码攻防编程防御性编程代码攻防编程. . 1.1.防御性代码的风格防御性代码的风格 2.2.编译警告开关的使用编译警告开关的使用 3.3.安全的数据结构安全的数据结构 4.4.检查所有的返回值检查所有的返回值 5.5.审慎处理内存资源审慎处理内存资源 6.6.在声明位置初始化所有变量在声明位置初始化所有变量 7.7.延迟声明变量延迟声明变量 8.8.审慎地进行强制转换审慎地进行强制转换 第第3 3章章 精心布局精心布局 1.1.源代码书写样式源代码书写样式 2.2.源代码结构布局源代码结构布局 3.3.源代码命名风格源代码命名风格 4.4.函数原子化函数原子化 5.5.恰当地处理错误恰当地处理错误 6.6.编著有意义的注释编著有意义的注释 7.7.创建具有上下文语境代码便于代码交流创建具有上下文语境代码便于代码交流 . . 第第2 2篇篇 整洁函数整洁函数 第第1 1章章 最小函数之道最小函数之道 1.1.函数的单一抽象层次原则函数的单一抽象层次原则 SLAP(Single Level of Abstraction Principle)SLAP(Single Level of Abstraction Principle) ①函数遵守最小职责原则①函数遵守最小职责原则 ----函数代表的操作粒度是最小的函数代表的操作粒度是最小的 ②不同层次的函数最小职责化②不同层次的函数最小职责化 --JDK--JDK、、.net framework 2.2. 函数实现模式之组合函数函数实现模式之组合函数 (Composed )(Composed ) ①函数组织方式①函数组织方式- -组合函数来组合最小函数组合函数来组合最小函数 ----调用者视角调用者视角- -调用组合函数,而不是调用最小函数调用组合函数,而不是调用最小函数 ----调用者与组合函数之间的稳定调用关系调用者与组合函数之间的稳定调用关系 ----组合函数的定义稳定的组合函数的定义稳定的 --------封装成结构、对象、消息等等封装成结构、对象、消息等等 --------预留参数预留参数 --------万能的变化类型、泛型万能的变化类型、泛型/ /模板模板 ②组合函数相当于面向对象中接口类②组合函数相当于面向对象中接口类 ------抽象与实现解耦抽象与实现解耦 ------实现逻辑发生变化,修改实现的函数实现逻辑发生变化,修改实现的函数 3.3.万恶之源万恶之源- -函数过长函数过长 ①功能外部特征与函数大小的关系①功能外部特征与函数大小的关系 ------一个能能一个函数一个能能一个函数 ②函数大小以②函数大小以IDEIDE环境编辑屏幕容纳的代码行数环境编辑屏幕容纳的代码行数X5X5 ----一般的函数代码行数不超过一般的函数代码行数不超过200200行左右行左右 ③过长的函数解构成若干个子函数③过长的函数解构成若干个子函数 ----组合函数组合函数={={子函数的集合子函数的集合} } ----成本低廉成本低廉 ----函数内部分段的过程函数内部分段的过程- -变成函数的表达变成函数的表达 4.4.最小函数原则最小函数原则 ①函数的职责单一①函数的职责单一 ②函数参数与返回值简化②函数参数与返回值简化 ③函数依据调用者的角色划分参数不同组合③函数依据调用者的角色划分参数不同组合 5.5.函数命名函数命名- -怎样取好的函数名怎样取好的函数名 第第2 2章章 函数体中的代码重复函数体中的代码重复 1.1.重复的危害重复的危害 ①连锁反应①连锁反应 ②开发成本高昂②开发成本高昂 ③软件工程③软件工程- -不是最优化过程不是最优化过程 ----管理者视角管理者视角 2.2.强加的重复强加的重复/ /无意的重复无意的重复/ /无耐心的重复无耐心的重复/ /开发者之间的重复开发者之间的重复 ①开发者之间的重复①开发者之间的重复 ----全局视角观察到重复性全局视角观察到重复性 ②无意的重复②无意的重复 ----管理者分配的任务类型管理者分配的任务类型 ③无耐心的重复③无耐心的重复 ----使用拷贝与粘贴使用拷贝与粘贴 ④强加的重复④强加的重复 3.3.不要重复自己不要重复自己DRYDRY——DonDon’’t Repeat Yourself Principlet Repeat Yoursel