程序员修炼之道 从小工到专家 6

第六章:当你编码时

  编码不是工作,工作不是机械的把设计转换为可执行语句,不主动思考他们的代码的开发者是在靠巧合编程。而我们需要的时更乐观积极的参与编码的过程。在制作代码时,需要考虑你以后做测试,要让代码易于测试,这样才能增加通往实际的可能性。

 

31 靠巧合编程

    灾难不是偶然的都是有预兆的,如果不做好编程,纯靠巧合,结局都不好。实现的偶然是那些只是因为代码现在的编写方式才得以发生的事情。你最后会依靠没有记人文档的错误或是边界条件.

  

32 算法速率

  用o()表示

 

常量型(访问数组元素,简单语句)

对数型〈二分查找〕自g表示法霆I。g2(n)的酊万形式丿线性型(顺序查找)

  • o(nlnlg(n)))  比线性差,但不会差很多(快速排序、堆排序的平均运行时间〕
  • o 〔n) 平方律型(选择和插入排序)

立方型(2” x矩阵相乘)

指数型(l旅行商问题,集合划分)

 

也可以通过常识来估算基本算法的阶

简单循环

嵌套循环

二分法

分而治之

组合

 

33 重构

应该重构的代码:

·重复。你发现了对DRY原则的违反

.非正交的设计。你发现有些代码或设计可以变得更为正交

.过时的知识。事情变了,需求转移了,你对问题的了解加深了。代码需要跟上这些变化。

.性能。为改善性能,你须要把功能从系统的一个区域移到另一个区域。

如何重构:

1.不要试图在重构的同时增加功能。

2.在开始重构之前,确保你拥有良好的测试。尽可能经常运行这些测试。这样,如果你的改动破坏了任何东西,你就能很快知道。

3.采取短小、深思熟虑的步骤:把某个字段从一个类移往另一个,把两个类似的方法融合进超类中。重构常常涉及到进行许多局部改动,继而产生更大规模的改动。如果你使你的步骤保持短小,并在每个步骤之后进行测试,你将能够避免长时间的调试。

 

34 易于测试的代码

如何测试:(针对合约进行测试)

假定我们有一个使用LinkedL1st和s的模块AO按照顺序,我们会:

1

 全面测试LinkedList的合约。

2.

全面测试S的合约。

3.

测试A的合约,它依赖于另外两个合约,但没有直接暴露它们。

 

测试装备应具有的功能:

  • 用以指定设置与清理(setup andcleanup)的标准途径。
  • 用以选择个别或所有可用测试的方法。
  • 分析输出是否是预期(或意外)结果的手段。
  • ·标准化的故障报告形式。

 

35 邪恶的向导

  向导可以帮助你自动生成骨架代码。但你要改编代码就只能靠自己,如果你真的使用向导,却不理解它制作出的所有代码,你就无法控制你自己的应用。你没有能力维护它,而且在调试时会遇到很大的困难。

 

posted @ 2022-11-12 18:05  花伤错零  阅读(31)  评论(0)    收藏  举报