code complete part1
最近在看code complete,学习了一些东西,作为点滴,记录下来。
关于类:
类的接口抽象应该一致
类的接口要可编程,不要对类的使用者做过多的假设。不要出现类似于:A的输入量一定要大于多少小于多少,一定要在某个函数前call之类的限制,而应该在assert等地方加入这些判断,让代码去做限制,而不是注释。
代码阅读的次数要比写的次数多得多
类的成员变量表征类拥有怎样一个属性
类的继承表征类还可以有另一个特殊的版本
类用到的其他类的次数叫做扇入(fan in),越少越好
要在构造函数中对所有的成员变量初始化
如果需要类的构造函数是私有的,并强制规定只能有一个对象实例的话,需要用如下代码
class A:
private A(){..}
public static A GetInstance()
{
return m_A;
}
private static A m_A = new A();
....
如果有些类只有数据,没有行为(get ... set ..),这样的类真的就没有必要了
子程序:
在某些经常会用到的代码,应该成为一个子程序,避免重复
子程序应当小于200行
可以在子程序的参数前表明 _in_ _out_ Inout_等关键字
子程序参数小于7个
防御式编程:
当用户的输入非法时,怎么处理。
几种方法:assert, error handle, exception, barrier.
assert主要用于程序内部的错误
error handle是用于在用户输入了一个非法的值,程序内部除了返回错误,为了不导致程序无法运行下去,需要做的一些WA,例如,用上一次的值,返回一个错误代码,print trace log, 返回一个中立值等
程序的正确性与鲁棒性是trade off
可以分层级来处理错误,如,底层代码只负责报告错误,由高层代码统一处理错误
barrier的方法是说,设定一个隔离层,专门对输入量进行validate,如果满足条件后,进入系统,则之后用assert
伪代码编程:
这是一种有效的编程方法,很多初级程序员的编程方法是这样的,先东平西凑,然后通过运行来看代码是否正常工作,这种开发方法效率低,应当等代码自己确认无误之后,再进行编译与运行,请避免在匆忙中完成代码
变量:
一个变量只表示一个意思,不要说int a ,当a <-1时表明有错误。。这时候,应当加一个变量
code complete part1的更多相关文章
- 重读 code complete 说说代码质量
重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete ...
- Code Complete 读后总结和新的扩展阅读计划
Code Complete 读后总结和新的扩展阅读计划 用了一年时间终于将代码大全读完了,在这里做一个简单的总结,并安排下一阶段的扩展阅读计划. 1.选择代码大全作为我程序员职业入门的第一本书,我认为 ...
- Code Complete阅读笔记(三)
2015-05-26 628 Code-Tuning Techniques ——Even though a particular technique generally represen ...
- Code Complete阅读笔记(二)
2015-03-06 328 Unusual Data Types ——You can carry this technique to extremes,putting all the ...
- 《Code Complete》ch.24 重构
WHAT? 重构(refactoring),Martin Fowler将其定义为“在不改变软件外部行为的前提下,对其内部结构进行改变,使之更容易理解并便于修改”. WHY? 神话:一个管理很完善的软件 ...
- 《Code Complete》ch.23 调试
WHAT? 调试——发现错误的一种手段 WHY? 相对于不善于调试的程序员,善于调试的程序员只需要前者1/20的时间就可以找出问题所在 HOW? 科学的调试方法 把错误的发生稳定下来:假设-证实/证伪 ...
- 《Code Complete》ch.21 协同构建
WHAT? 所有的协同构建技术都试图通过这样那样的途径,将展示工作的过程正式化,以便将错误暴露出来 WHY? 提高缺陷检出率,从而缩短开发周期,降低开发成本 发现不明显的错误信息,如不恰当的注释.硬编 ...
- Code Complete阅读笔记(一)
代码大全也读了好几个月了,一开始读中文版,到现在慢慢尝试着读原版,确实感受到了"每天进步一点点"的魅力.遗憾的是没有从一开始就做阅读记录,总有不能尽兴和思路不清之感.确实,就像项目 ...
- Code Complete 笔记—— 第二章 用隐喻来更充分理解软件开发
在这章里面,提到的隐喻,类同于比喻(建模)的方法的去理解软件开发. 隐喻的优点在于其可预期的效果能被所有人所理解.不必要的沟通和误解也因此大为减低,学习与教授更为快速,实际上,隐喻是对概念进行内在化和 ...
随机推荐
- Http的Get/Post请求区别
1.HTTP请求格式: <request line> <headers> <blank line> [<request-body>] 在HTTP请求中, ...
- as follows ,as follow && following
在现在牛津英语上,as follow 和 as follows 用法差不多的,但后者更常用,不是说谁指一个谁指好几个.牵强附会! 为了保证正确性,你应该用as follows,单数的最好少用.意义差不 ...
- ubuntu 16.04 搭建无线共享热点(PC 无线直连Android移动终端 调试,监控屏幕)
由于android终端usb接口比较松,公司的无线网络使用人过多比较慢,所以想使用PC端无线直连 调试Android终端 配置无线共享 1 网卡要支持 2 安装 plasma-nm sudo apt- ...
- Thinkphp 带查询条件数据分页
//查询条件中如果有中文 $keyword= urldecode(I("request.keyword")); if ($keyword!=""){ $Mode ...
- linux(centos)下挂载nefs文件系统
有时候,在将硬盘插到Linux系统上,挂载硬盘时一直提示:unknown filesystem type 'ntfs'.在尝试网上的方法也遇到了一些问题. 这是有的 linux 发行版并不默认支持挂载 ...
- zepto.js学习
除了$( Zepto)对象上的直接方法外(如$.extend),文档对象中的所有方法都是集合方法. $.grep v1.0+ $.grep(items, function(item){ ... }) ...
- hdu4067
//Accepted 1812 KB 514 ms /* source:hdu4067 time :20150816 by :songt */ /*题解:网络流 首先我们贪心建图:对于u到v的一条边, ...
- go 准备
坚持每天抽点时间 学习联系 go 语法 主要参考 https://tour.golang.org 官方导向,英语不好的可以切换到中文版本.这个之前都是墙外面的,只能访问国内映像地址 吐槽一下就是 里面 ...
- php大力力:技术排错过程中,关键点总结和心情历程(2015-10-19)
9:40 2015/10/19技术排错过程中,关键点总结和心情历程 有一个按照标题进行内容分类的函数似乎不起作用,这叫人沮丧. 在页面显示图片地址时候,在源系统和目标系统中,包含图片地址的页面代码格式 ...
- React Native 的绑定 this
在React Native开发中,如果使用ES6语法的话,最好绑定this.但是使用ES5语法的话不需要绑定this.因为ES5会autobinding. this所指的就是直至包含this指针的上层 ...