最近在看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的更多相关文章

  1. 重读 code complete 说说代码质量

    重读code complete 说说代码质量 2014年的第一篇文章本来计划写些过去一年的总结和新年展望,但是因为还有一些事情要过一阵才能完成,所以姑且不谈这个,说说最近重读code complete ...

  2. Code Complete 读后总结和新的扩展阅读计划

    Code Complete 读后总结和新的扩展阅读计划 用了一年时间终于将代码大全读完了,在这里做一个简单的总结,并安排下一阶段的扩展阅读计划. 1.选择代码大全作为我程序员职业入门的第一本书,我认为 ...

  3. Code Complete阅读笔记(三)

    2015-05-26   628   Code-Tuning Techniques    ——Even though a particular technique generally represen ...

  4. Code Complete阅读笔记(二)

    2015-03-06   328   Unusual Data Types    ——You can carry this technique to extremes,putting all the ...

  5. 《Code Complete》ch.24 重构

    WHAT? 重构(refactoring),Martin Fowler将其定义为“在不改变软件外部行为的前提下,对其内部结构进行改变,使之更容易理解并便于修改”. WHY? 神话:一个管理很完善的软件 ...

  6. 《Code Complete》ch.23 调试

    WHAT? 调试——发现错误的一种手段 WHY? 相对于不善于调试的程序员,善于调试的程序员只需要前者1/20的时间就可以找出问题所在 HOW? 科学的调试方法 把错误的发生稳定下来:假设-证实/证伪 ...

  7. 《Code Complete》ch.21 协同构建

    WHAT? 所有的协同构建技术都试图通过这样那样的途径,将展示工作的过程正式化,以便将错误暴露出来 WHY? 提高缺陷检出率,从而缩短开发周期,降低开发成本 发现不明显的错误信息,如不恰当的注释.硬编 ...

  8. Code Complete阅读笔记(一)

    代码大全也读了好几个月了,一开始读中文版,到现在慢慢尝试着读原版,确实感受到了"每天进步一点点"的魅力.遗憾的是没有从一开始就做阅读记录,总有不能尽兴和思路不清之感.确实,就像项目 ...

  9. Code Complete 笔记—— 第二章 用隐喻来更充分理解软件开发

    在这章里面,提到的隐喻,类同于比喻(建模)的方法的去理解软件开发. 隐喻的优点在于其可预期的效果能被所有人所理解.不必要的沟通和误解也因此大为减低,学习与教授更为快速,实际上,隐喻是对概念进行内在化和 ...

随机推荐

  1. Http的Get/Post请求区别

    1.HTTP请求格式: <request line> <headers> <blank line> [<request-body>] 在HTTP请求中, ...

  2. as follows ,as follow && following

    在现在牛津英语上,as follow 和 as follows 用法差不多的,但后者更常用,不是说谁指一个谁指好几个.牵强附会! 为了保证正确性,你应该用as follows,单数的最好少用.意义差不 ...

  3. ubuntu 16.04 搭建无线共享热点(PC 无线直连Android移动终端 调试,监控屏幕)

    由于android终端usb接口比较松,公司的无线网络使用人过多比较慢,所以想使用PC端无线直连 调试Android终端 配置无线共享 1 网卡要支持 2 安装 plasma-nm sudo apt- ...

  4. Thinkphp 带查询条件数据分页

    //查询条件中如果有中文 $keyword= urldecode(I("request.keyword")); if ($keyword!=""){ $Mode ...

  5. linux(centos)下挂载nefs文件系统

    有时候,在将硬盘插到Linux系统上,挂载硬盘时一直提示:unknown filesystem type 'ntfs'.在尝试网上的方法也遇到了一些问题. 这是有的 linux 发行版并不默认支持挂载 ...

  6. zepto.js学习

    除了$( Zepto)对象上的直接方法外(如$.extend),文档对象中的所有方法都是集合方法. $.grep v1.0+ $.grep(items, function(item){ ... }) ...

  7. hdu4067

    //Accepted 1812 KB 514 ms /* source:hdu4067 time :20150816 by :songt */ /*题解:网络流 首先我们贪心建图:对于u到v的一条边, ...

  8. go 准备

    坚持每天抽点时间 学习联系 go 语法 主要参考 https://tour.golang.org 官方导向,英语不好的可以切换到中文版本.这个之前都是墙外面的,只能访问国内映像地址 吐槽一下就是 里面 ...

  9. php大力力:技术排错过程中,关键点总结和心情历程(2015-10-19)

    9:40 2015/10/19技术排错过程中,关键点总结和心情历程 有一个按照标题进行内容分类的函数似乎不起作用,这叫人沮丧. 在页面显示图片地址时候,在源系统和目标系统中,包含图片地址的页面代码格式 ...

  10. React Native 的绑定 this

    在React Native开发中,如果使用ES6语法的话,最好绑定this.但是使用ES5语法的话不需要绑定this.因为ES5会autobinding. this所指的就是直至包含this指针的上层 ...