最近在看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. mysql5.7.10免安装版出现的问题及应对

    在对应目录下新建my.ini [mysqld] # 设置mysql的安装目录 basedir=D:\mysql-5.7.10 # 设置mysql数据库的数据的存放目录,必须是data datadir= ...

  2. CSS之立方体绘画步骤

    附上总的代码: <!DOCTYPE html><html><head> <title>立方体</title> <meta charse ...

  3. 横向滑动的GridView

    思路: GridView行数设置为一行,外面套一个HorizontalScrollView,代码中设置GridView宽度 xml代码 <HorizontalScrollView android ...

  4. LeetCode Rotate List

    struct ListNode { int val; ListNode *next; ListNode(int x) : val(x), next(NULL) {} }; class Solution ...

  5. beego 框架入门

    根据官网向导安装配置好环境和工具https://beego.me 就可以开始了,先来入门下. 1.新建项目  在项目目录下 bee new quickstart成功后就可以运行了 http serve ...

  6. [SHELL]判断一个命令是否存在

    首先要说明的是,不要使用which来进行判断,理由如下: 1.which非SHELL的内置命令,用起来比内置命令的开销大,并且非内置命令会依赖平台的实现,不同平台的实现可能不同. # type typ ...

  7. AngulaJs+Web Api Cors 跨域访问失败的解决办法

    //在服务的WebConfig文件中添加以下代码即可 //如节点已存在请去掉 <system.webServer> <httpProtocol> <customHeade ...

  8. mysql数据库引擎 MyISAM和 InnoDB区别

    1. 存储结构 MyISAM:每个MyISAM在磁盘上存储成三个文件.第一个文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩展名为.MYD (MYData).索引文件 ...

  9. 混合开发H5的图片怎么适配自己想要的大小

    1.先上个自己没适配的图,这个图没显示全,因为用的是webview 所以 用的是webView的代理事件 解决 2.上代码 NSString *injectionJSString = @"v ...

  10. Sql Server 之 for xml (path,raw,auto,root)

    1.for xml path('str') select ID,CreateTime  from dbo.ArticleInfo for xml Path('mytitle') 结果:(注意:如果是s ...