代码整洁之道

衡量代码质量的唯一有效标准:WTF/min引自第296页

 

 

 
什么是整洁代码
1,代码逻辑直接了当,让缺陷难以隐藏
2,尽量减少依赖关系,使之便于维护
3,依据某种分层策略完善错误处理代码
4,性能调至最优,省得引诱别人做没规矩的优化
5,整洁的代码只做一件事
6,简单直接,具有可读性
7,有单元测试和验收测试
8,有意义的命名
9,代码应在字面上表达其含义
10,尽量少的实体:类、方法、函数
11,没有重复代码引自第296页
 
好的命名:
1,名副其实:名称不需要注释补充就可见其含义、用途
2,避免误导:
(1)系统专有名称不宜作为变量名
(2)提防差别很小的名称,在代码自动完成时容易选错
(3)用字母I和O作为变量名,让人看成1和0
3,做有意义的区分
不要用数字或废话来区分
4,使用读得出来的名称
5,使用可搜索的名称
少用单字母名称或没有名称的数字常量
6,避免使用编码
(1)不必在名称中标明类型,现代语言有完善的类型检查
(2)不必在名称中区别成员变量,应采用自动高亮成员的编译环境
(3)宁可对实现编码,也不要对接口编码
7,避免使用让别人理解成其他领域常用词的名称
8,类名应该是名词或名词短语,不应是动词
9,方法名应当是动词或动词短语
10,不要使用俗语
11,每个抽象概念用一个词,不要混用同义词
12,不要用双关语,例如add
13,尽量用术语(CS术语,算法,数学术语)命名
14,使用程序设计的领域的习惯名称
15,添加富有意义的语境,例如利用address封装各种个人信息
16,不要添加没用的语境引自第296页
 
好的函数:
1,短小
(1)不该超过20行
(2)每个代码块(if, else,while)应该只有一行,包含一个函数
2,只做一件事
如果能拆成几个函数,就不是只做一件事
3,每个函数一个抽象层次
自顶向下的抽象层次
4,switch语句
用于创建多态对象,并隐藏在抽象工厂中
5,使用描述性的名称
6,尽量避免多余2个参数
(1)使用返回值而不是输出参数
(2)不要用标识参数,即向函数传入bool值,应该写成两个函数
(3)如果一定需要多个参数,那么可能需要对参数进行封装
7,无副作用
尽量少做不是函数名称表明的事情
8,使用异常代替返回错误码
(1)把try,catch从正常流程中分离开
9,消除重复代码
10,在小函数中,偶尔出现return,continue,break没坏处,但不要用goto
11,先把函数写出来,再规范化引自第296页
 
好的注释
1,尽量减少注释量,用代码本身说明问题
(1)代码常常变动,注释却不能跟着变
(2)只有代码是唯一准确的信息来源
(3)创建一个和注释所言相同的函数来代替注释
2,好的注释
(1)法律信息
(2)解释程序员的意图
(3)警示其他程序员某种后果
(4)TODO
定期删除不需要的
(5)公共API中的javadoc
3,坏的注释
(1)喃喃自语,只有作者自己能看懂
(2)多余的注释
不一定比代码精到
(3)不是每个函数和变量都要有javadoc
(4)日志式注释,修改记录
(5)能用函数或变量时就别用注释
(6)用代码控制系统,而不是注释表明归属
(7)不要保留注释掉的代码,利用源代码控制系统引自第296页
 
好的格式:
1,垂直距离
(1)变量声明尽可能靠近使用位置,本地变量应在函数顶部出现
(2)实体变量应在类的顶部声明
(3)相关函数放在一起
(4)函数的排列顺序保持其相互调用的顺序
2,水平位置
(1)一行代码尽量短,不超过100-120字符
(2)用空格将相关性弱的分开:加减法,赋值,乘法因子见无需空格
(3)声明和赋值不需要水平对齐
(4)缩进
 
空循环容易忽略行末的分号,要括号包围空循环。引自第296页
 
测试
1,TDD三定律
(1)在编写不能通过的单元测试前,不能编写生产代码
(2)只可编写刚好无法通过的单元测试,不能编译也不算通过
(3)只可编写刚好足以通过当前失败测试的生产代码
2,测试代码和生产代码一样重要,一样需要整洁
3,每个测试一个断言,每个测试一个概念引自第296页
 
并发编程
1,并发防御原则
(1)单一权责:方法/类/组件应当只有一个修改的理由
(2)限制数据作用域
(3)使用数据副本避免共享数据
(4)线程应尽可能独立
2,了解常见的执行模型:生产者-消费者,读者-作者,宴席哲学家
3,警惕同步方法之间的依赖
4,保持同步区微小
5,尽早考虑关闭的代码,注意线程之间的依赖关系
6,测试线程代码
(1)将伪失败看作可能的线程问题
(2)先使非线程代码工作
(3)运行多于处理器数量的线程
(4)在不同平台上运行
(5)手动插入调试的试错代码引自第296页
 
延伸阅读:

代码简洁之道:编写干净的 React Components & JSX

编写一致、灵活和可持续的 HTML 和 CSS 代码的规范。

 

posted @ 2021-04-15 11:06  优前程  阅读(327)  评论(0编辑  收藏  举报