第一章 有意义的命名(起名是门艺术)
示例代码为伪代码,懂就好
- 名副其实
目的:只需要一个好名称就能知道发什么了什么事情
示例:int d == > int daysSinceCreation; - 避免误导
- 有意义的区分
目的:提供正确信息,提供导向作者意图的线索。
示例:a1,a2没有区别,getActiveAccount()与getActiveAccounts()没有区别
代码示例:
change( char a1[], char a2[])
for (..i;.......)
a2[i] = a1[i]
但是将a1,a2换成 source与destination就会好得多。
- 使用读的出的名称
- 可搜索的名称
- 避免思维映射
目的: 明确才是王道 - 每个概念对应一个词
目的:每个抽象概念选一个词,并且一以贯之
示例:一堆代码里有controller与manager还有driver,他们其实是没什么区别的,可以全用controller或者manager。
第二章 函数
- 函数应该短小(不应该超过20行,应该只有3-4行,甚至2-3行)
- 只做一件事情,做好这件事,只做一件事
- 每个函数一个抽象层级
- 使用描述性的名称,(描述性的名称要比描述性长注释好)
- 函数参数越少越好(具体如何避免还要在实践中积累,或者如果参数很多就应该封装为类)
- 函数应该无副作用。其实也是函数就做一件事的翻版(比如检查密码函数,checkPassword(),里面只能检查密码,不能有其他的操作,例如session.initialize(),就是不允许的)
- 函数应该分开指令与询问,要么是做什么,要么是回答什么问题,两者不可兼得,也就是函数就做一件事的翻版。
- 避免使用输出参数,(appendFooter(s),此时s为输出参数,可以用report.appendFooter()代替,作为对象的方法,修改所属对象的状态)
- 使用异常替代返回错误码,而且在try catch代码块中要从代码主体抽离出来,try的是一个函数,catch里是一个函数
- 消除重复,重复可能是软件中一切邪恶的本源
- 每个函数都应该要有相应的测试,应该要去些单元测试
第三章 注释
- 注释越少越好
- 有些必要的注释可以留下(法律信息 提供信息的 对意图解释的 警示的 )
- 别写废话注释 误导性的注释
- 能用函数或者变量就别用注释 或者考虑重构代码
- 为只做一件事的函数选个好名字
第四章 格式
- 垂直格式(200-500行单个文件最佳 展示不同思路的代码间要有空行 关系密切相关的代码函数之间距离要短 )
- 水平方向的区隔与靠近(if或while之类代码的缩进)
网友评论